此解决方案背后的一般想法是要求用户输入他们正在搜索的用户名,然后向服务器发送请求以检索具有该用户名的所有用户。一旦收到响应,我们就会使用从服务器接收到的结果动态填充一个选择,并让用户选择一个用户名。
注意:我不建议您在当前状态下使用此解决方案,因为我始终不鼓励将 Javascript 代码与您的视图混合使用。我强烈建议将您的 Javascript 代码移动到不同的文件中!
UsernameModel.cs
public class UsernameModel
{
[Required]
public string Username { get; set; }
}
用户控制器.cs
using Newtonsoft.Json;
public class UserController : Controller
{
...
[HttpPost]
public ActionResult Get(UsernameModel model)
{
// user service has code to search for users
// whose username equals to or is similar to model.Username
var users = userService.GetUsersByUsername(model.Username);
var response = new
{
Users = users
};
return Content(JsonConvert.Serialize(response), "application/json");
}
...
}
查看:
<!-- HTML Markup to edit different task properties -->
<input type="hidden" id="UserSearchUrl" value="@Html.Action("Get", "User")" />
<label for="Username">Username:</label>
<input type="text" name="Username" id="Username" />
<button id="SearchUsername" type="button">Search</button>
<select id="UserSelect"></select>
<script type="text/javascript">
$(function () {
$('#SearchUsername').on('click', function () {
$.ajax({
type: "POST",
url: $("#UserSearchUrl").val(),
contentType: "application/json",
data: { Username: $('#Username').val() },
dataType: "json",
success: function (data, textStatus, jqXHR) {
for (var i = 0; i < data.Users.length; i++) {
var option = $('<option>').attr('val', data.Users[i]);
option.text(data.Users[i]);
$('#UserSelect').append(option);
}
},
error: function (jqXHR, textStatus, errorThrown) {
// enter error handling code here
}
});
});
});
</script>
这只是搜索用户的一种可能方式。它使用 Javascript DOM 操作和 Ajax。除了这个之外,还有其他几种方法可以实现这一点,但都将涉及某种 Javascript。
另一种可能的方法是在加载所有用户的同时加载编辑页面上的任务信息。然后在客户端浏览器中使用 Javascript 搜索用户,从而无需向服务器发送请求。如果你愿意,我可以举一个这个解决方案的例子。