2013-09-09 4 views
0

Я заселена с SelectList Программным с помощью SelectList Constructor (IEnumerable, String, String)Как правильно использовать HTML.DropDownList с Ajax вызовов для MVC

IEnumerable<Permission> ie_SelLstContentAvailPerms; 
tmpLstPermissions = FilterAssignablePermissionsByRoleMgblty(p_iRoleId,vmRolePermAdmin.lstPermissionsSource);   
//test Forcing Results in to IEnumerable format for Select list Constructor 
ie_SelLstContentAvailPerms = tmpLstPermissions.ToList(); 
vmRolePermAdmin.selLstPermissionsSource = new SelectList(ie_SelLstContentAvailPerms, "PermissionId", "Name"); 

И я использую структуру DropDownList:

@Html.DropDownList("ddlAssignedRolePermissions", (Model.selLstCurrentRolePermissions), null, new { @id = "ddlAssignedRolePermissions", @size = "5", @onchange = "ddlAssignedRolePermissionsEvent(this)" }) 

Мое предыдущее использование этой структуры имеет вызов ajax, метод успеха которого возвращает обновленную модель ----, но его основной объект (Postify to AssignPermission (iUserID)) выполняет работу с моделью просмотра на основе элемента, выбранного в выпадающий список

$.ajax({ 

      url: "~/../../User/AssignPermission", 
      type: "POST", 
      data: $.postify({ "p_permId": optionSelectedPerm.value, "p_UserId": iUserId }), 
      cache: false, 
      success: function() { 
       ReloadUserPermissions(); 
      }, 
      error: function() { 
       // alert("FAIL"); //TODO ? 
      } 
     }); 

Я пытался повторить эту структуру для новой страницы, но вместо того, чтобы использовать метод результатов успешного вызова Ajax я пытался вернуть обновленную модель в основном АЯКС работы .. если выше примера были структурированы таким образом, чтобы функция успеха не выполнялась, и метод ActionResult контроллера возвращал обновленную модель. Это не работает. Я вижу данные (обновленные) в представлении во время отладки, но он не обновляет дату ...

Должен ли я использовать функцию успеха вызова Ajax, чтобы обновить представление?

<script type="text/javascript"> 

     $(document).ready(function() { 
      var optionSelectedPerm; 
      var mvcTmpData_iCurrentRoleID; 
     }); 

     function SelectedRole(p_lstRole) { 
      debugger; 
      mvcTmpData_iCurrentRoleID = $("#ddlSelectedRole").val(); 
      $.ajax({ 
       url: "~/../../AdminRoles/AdminRolePermissions", 
       type: "POST", 
       data: $.postify({ "p_nullRoleId": mvcTmpData_iCurrentRoleID }), 
       cache: false, 
       success: function() { 
         AjaxReloadRolePermissions(); 
       }, 
       error: function() { 

       }, 
      }); 

       function AjaxReloadRolePermissions() { 
       //alert("Current RoleID: " + mvcTmpData_iCurrentRoleID); 

      var url = '@Url.Action("ReloadRolePermissions", "AdminRoles", new { p_RoleId = "zReplaceRoleId" })'; 
      window.location.href = url.replace('zReplaceRoleId', mvcTmpData_iCurrentRoleID); 
     } 

     } 

</script> 

Пожалуйста, обратите внимание, что для того, чтобы выполнить метод контроллера, как цитируемое в вызове Ajax первый рабочий сценарий «AssignPermission» является ActionResult Типа EmptyResult и отмечены [HttpPost], поэтому в основном это может сделать работу и не беспокоиться о реальном возвращении. НО !! функция успеха этого же вызова Ajax позволяет мне обновить вид с недавно скорректированных ViewModel ....

Мой atempt воспроизвести мои первоначальные результаты не удается, я вижу содержимое модели, но это не делают в представлении

ответ

0

Если кто-то заботится о своей простоте, основная работа функции Ajax не может вызвать действие контроллера, которое обновляет представление. Однако вызов успеха Ajax может, безусловно, вызвать один из действий ActionResults контроллера, чтобы обновить представление и после этого его связанные частицы в этом представлении ,,,

Действия контроллера в основной части вызова ajax, которые работают, должны быть отмечены EmptyResult & [HttpPost]

Контролирующее действие, которое действительно запускает ActionResult для обновления вашего вида, в моем случае просто возвращает вид и недавно измененную модель ... и снова заметьте, что ее вызвала функция Успеха предыдущая цитированная функция ajax. Последняя публикация кода выше довольно охватывает все это.

Смежные вопросы