JQuery: как обрабатывать ASP.Net MVC 2 Просмотр объектов в данных Ajax? - PullRequest
0 голосов
/ 27 июля 2010

Я обрабатываю часть отправки страницы ASP.NET MVC 2 через javascript / JQuery, потому что мне нужно создать несколько массивов, в контроллере я либо возвращаю назад представление (если есть ошибки), либо URL (перенаправление)

Я могу нормально обрабатывать URL, но я понятия не имею, как обрабатывать возврат объекта View

public ActionResult Update(List<string> items, List<string> items2)  

{

// если возвращается ошибка View
вернуть Json (View («EditRoles», новый AdminEditRolesViewModel (role)), JsonRequestBehavior.AllowGet);

// если OK, вернуть новый URL
return Json (RedirectToAction ("EditRolesDetails"), JsonRequestBehavior.AllowGet);

}

Javascript выглядит следующим образом:

$.ajax({  
                url: '/Admin/Update/',  
                data: { items: editedRoles, items2: $("#deleteList").sortable('toArray') },  
                success: function(data) {  
                    window.location.href = data;  
                }  
            });  

Каким образом обрабатывает URLS, если данные выглядят как "/ Controller / Action", просто не знаете, как что-то обрабатыватькак представление, которое возвращает объект с

  1. RouteName
  2. RouteValues ​​(Массив пар ключ / значение)

Большое спасибо

Ответы [ 4 ]

0 голосов
/ 28 июля 2010

@ Elspiko

Да, в итоге я использовал этот подход в качестве обходного пути,

1) Я все еще создаю объект Json, но заполняю его данными, которые могут быть использованы в случае ошибки, ивыкинуть его обратно 2) В качестве обратного вызова я беру этот объект и передаю его обратно в контроллер и обрабатываю его соответствующим образом

$.ajax({
                url: '/Controller/Action/',
                data: { items: editedRoles, items2: $("#deleteList").sortable('toArray') },
                type: 'POST',
                traditional: true,
                success: function(data) {
                    var url = data.url + "?key=" + data.key + "&errorMessage=" + data.errorMessage;

                    window.location.href = url;
                }
            });

И в контроллере

public ActionResult Submit(string key, string errorMessage)
    {
        if(string.IsNullOrEmpty(key) && string.IsNullOrEmpty(errorMessage))
        {
            return RedirectToAction("SuccessAction");
        }

        //error coming back from jQuery, rebuild ModelState errors
        _wrapper.AddError(key, errorMessage);            
        return View("MyView", new myView());
    }
0 голосов
/ 28 июля 2010

Я не знаю, уверен ли я на 100%, что вы пытаетесь сделать, но если есть ошибки, вы не можете пройти через ModelState и сопоставить эти ошибки с новым типом, который вы возвращаете через JsonResult ).

Так может быть что-то вроде:

var item = new AdminEditRolesViewModel(roles);

foreach (var modelState in ModelState) 
{
   item.Errors.Add(modelState.Value);
}

return new JsonResult
             {
                 Data = item
             };

Тогда в вашем JS вы будете проверять, есть ли ошибки, и исправлять их соответствующим образом.

Это то, что вы ищете, или я совершенно не согласен с вашей потребностью?

0 голосов
/ 28 июля 2010

Просто чтобы спросить, действительно ли вы хотите создать модальное оповещение какого-то рода? Что-то, где у вас может быть частичное представление, которое заполняется данными об ошибках и отображается для конечного пользователя, возможно, с использованием JQuery или чего-то еще, чтобы это выглядело хорошо?

0 голосов
/ 27 июля 2010

Как правило, если вы используете ajax, вы хотите вернуть json-представление вашей модели, а не представление.

В вашем случае я предполагаю, что вы захотите вернуть строку, такую ​​как / Controller / EditRole / 123

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