2015-07-02 4 views
1

Итак, я следил за несколькими учебниками о том, как отправить форму с использованием Ajax.BeginForm() нотации. Все кажется довольно простым. Однако то, что я замечаю (как видно из скриншотов ниже), заключается в том, что, несмотря на использование ajax, он по-прежнему перенаправляет отображение результата вместо замены содержимого div. Почему это?ASP.NET Ajax BeginForm перенаправляет?

Для справки, я следующее: Submit form using AJAX in Asp.Net mvc 4

КОД:

 @Html.ValidationSummary(true) 
     @using (Ajax.BeginForm("Create", "Role", new AjaxOptions(){ 
      InsertionMode = InsertionMode.Replace, 
      UpdateTargetId = "RoleCreateResult", 
      HttpMethod = "POST" 
     })) 
     { 
      @Html.AntiForgeryToken() 
      <fieldset> 
      <div class="form-group"> 
       <label class="col-md-2 control-label">Name</label> 
       <div class="col-md-10"> 
        <input type="text" class="form-control" id="RoleName" name="RoleName" data-val-required="The Role name field is required." data-val="true" /> 
       </div> 
      </div> 
      <div class="form-group"> 
       <div class="col-md-offset-2 col-md-10"> 
        <input type="submit" id="CreateRoleSubmit" class="btn btn-default" value="Save" /> 
       </div> 
      </div> 
      </fieldset> 
     } 
     <div id="RoleCreateResult"></div> 

Controller Код:

// 
    // POST: /Role/Create 
    [HttpPost] 
    public ActionResult Create(FormCollection collection) 
    { 
     try 
     { 
      var roleManager = new RoleManager<Microsoft.AspNet.Identity.EntityFramework.IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext())); 
      if (roleManager.RoleExists(collection["RoleName"])) 
      { 
       return Json("Role " + collection["RoleName"] + " already exists.", JsonRequestBehavior.DenyGet); 
      } 
      else 
      { 
       var role = new IdentityRole(); 
       role.Name = collection["RoleName"]; 
       roleManager.Create(role); 
       return Json("Role " + collection["RoleName"] + " created successfully.",JsonRequestBehavior.DenyGet); 
      } 
     } 
     catch (Exception ex) 
     { 
      return Json("Error occured: " + ex.Message, JsonRequestBehavior.DenyGet); 
     } 
    } 

Вынесено HTML:

<form id="form0" method="post" data-ajax-update="#RoleCreateResult" data-ajax-mode="replace" data-ajax-method="POST" data-ajax="true" action="/Role/Create"> 

    <input type="hidden" value="N2laLUmcoQ2yvbKwK40Sd6z1f56aZ2w_v0SQ-WfOcgCGnFaSAVNCkfjYatyU…E-NxRPPMueFOW4r-SVSpceGZX99iWsjpstd82URv4cRsNqbvf2UnJ0M1VWA2" name="__RequestVerificationToken"></input> 
    <fieldset> 
     <div class="form-group"></div> 
     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <input id="CreateRoleSubmit" class="btn btn-default" type="submit" value="Save"></input> 
      </div> 
     </div> 
    </fieldset> 

</form> 
<div id="RoleCreateResult"></div> 

Экраны:

redirect

ответ

1

Я бы сначала убедиться, что ваши действия возвращает частичное представление (не видя этого я не могу подтвердить это делает):

public ActionResult Create() 
{ 
    return PartialView("Create"); 
} 

В противном случае я бы удостоверился, что у вас есть все ваши ссылки на javascript на jquery и jquery.unobtrusive-ajax и что они (нет 404):

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script> 
+0

Я обновил свой вопрос, включив мой контроллер. Он не возвращает частичный вид, он возвращает json – Kyle

+0

@Kyle, если вам не нужен json, вы можете просто использовать результат 'Content (" "). Похоже, что ваши ссылки на javascript либо не указаны, либо не загружены. Вы проверили это? – hutchonoid

+0

Да, похоже, что это исправлено, моя ссылка была поломка. Хотя говорить с вашим другим моментом. Какая разница в возврате контекста vs json vs string и т. Д. – Kyle

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