ASP.NET MVC3 - DropDownList使用jQuery刷新模型

时间:2011-09-14 14:16:57

标签: jquery asp.net-mvc-3

我有一个下拉列表,当更改时,应该刷新视图的模型。这是控制器:

    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操作。为什么不呢?我该如何解决?

我是一个完全的菜鸟 - 非常感谢你的帮助。

2 个答案:

答案 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://blogs.us.sogeti.com/swilliams/2009/05/11/different-action-results-with-asp-net-mvc-and-jquery/

http://iridescence.no/post/Invoking-ASPNET-MVC-Actions-from-JavaScript-using-jQuery.aspx

Return ActionResult to a Dialog. ASP.NET MVC