我有一个下拉列表,当更改时,应该刷新视图的模型。这是控制器:
public ActionResult Index()
{
//do something totally awesome
}
[HttpPost]
public ActionResult Index(int user)
{
//do something even more awesome with the new value selected from the drop down list
}
观点的相关部分:
<div id="selectuser" class="user-input">@Html.DropDownListFor(x => x.SelectedUser, Model.Users)</div>
和用于处理下拉列表更改的jQuery:
$(function () {
$('#selectuser select').change(function () {
$.post('@Url.Action("Index", "Home")', { user: $(this).val() }, function (result) {
});
});
});
似乎一切正常,除了jQuery部分。显然,UrlAction(...)是不对的。当用户更改选择时,这是MVC尝试加载的URL:http://localhost:5555/@Url.Action%28%22Index%22,%20%22Home%22%29
我期待MVC在选择更改时路由到控制器中的HttpPost Index操作。为什么不呢?我该如何解决?
我是一个完全的菜鸟 - 非常感谢你的帮助。
答案 0 :(得分:2)
这里发生的事情是Razor引擎没有评估@ Url.Action()。如果我不得不猜测,我会说生成JavaScript代码的任何内容都不在同一个剃刀视图中。如果你还没有,我首先将代码移动到视图页面上的一个块中,如果你还没有。从原始帖子中不清楚JQuery代码是否在视图中。
答案 1 :(得分:0)
您是否尝试过使用ajax回拨函数?
$('#selectuser select').change(function () {
$.ajax({
url: '@Url.Content("~/Home/Index")',
type: "POST",
data: val,
datatype: "json",
success: function (data, status, request) {
// success code here
},
error: function (request, status, error) {
// error code here
}
});
}
这是一个返回JSON的控制器函数(Index)的例子:
[HttpPost]
public JsonResult Index(int val)
{
try
{
// do what you need to here
return Json(new
{
// Returning a partial view and success
Html = this.RenderPartialView("_PartialView", model),
Success = true
});
}
catch (Exception ex)
{
return Json(new
{
// Returning a partial view and and error
Html = this.RenderPartialView("_PartialView", model),
Success = false
}, JsonRequestBehavior.AllowGet);
}
}
我在下面添加了一些例子,因为你必须使用ActionResult并且不能使用JsonResult。
http://iridescence.no/post/Invoking-ASPNET-MVC-Actions-from-JavaScript-using-jQuery.aspx