ASP.NET MVC3 - DropDownList обновляет модель с помощью jQuery - PullRequest
2 голосов
/ 14 сентября 2011

У меня есть выпадающий список, который при изменении должен обновить модель для представления.Вот контроллер:

    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 (...) не прав.Когда пользователь изменяет выбор, это URL-адрес, который MVC пытается загрузить: http://localhost:5555/@Url.Action%28%22Index%22,%20%22Home%22%29

Я ожидал, что MVC направит действие HttpPost Index в контроллере, когда выбор был изменен.Почему не так?Как мне это исправить?

Я в этом совершенно нерешительный человек - ваша помощь очень ценится.

Ответы [ 2 ]

2 голосов
/ 14 сентября 2011

Здесь происходит то, что движок Razor не оценивает @ Url.Action (). Если бы мне пришлось угадывать, я бы сказал, что то, что генерирует код JavaScript, не совпадает с бритвой. Если вы еще этого не сделали, я бы начал с перемещения кода в блок на странице просмотра, если вы еще этого не сделали. Из исходного поста не ясно, отображается ли код JQuery или нет.

0 голосов
/ 14 сентября 2011

Вы пытались использовать 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
       }
    });
}

Вот пример функции контроллера (Index), которая возвращает JSON:

[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

Вернуть ActionResult в диалог. ASP.NET MVC

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...