2017-07-01 86 views
0

大家好消息。我有问题,再次。我有个人信息块,个人信息编辑块和密码块。点击按钮后,我需要重新加载密码块。但我有一个问题,当我点击按钮时,我的页面尝试重新加载所有页面。并且需要再次调用加载个人和密码信息的方法。但是,我只需要在密码块中显示消息并使用密码进行操作,而不会影响个人信息块。 (另外我需要在不影响密码块的情况下使用个人信息块,但我认为这将是下面的相同答案)。点击表单中的按钮后重新加载页面的一部分asp.net

PersonalInf cotroller:

[HttpPost] 
    public ActionResult changePassword(PersonalPageModel personalPage) 
    { 
     var passwordDetauls = dbModel.USERS.Where(model => 
     model.vPassword == personalPage.usersModel.NewPassword 
      ).FirstOrDefault(); 

     if (passwordDetauls != null) 
     { 
      personalPage.usersModel.ChangePasswordErrorMessage = "Новый пароль совпадает со старым!"; 
      return View("~/Views/home/PersonalPage.cshtml", personalPage); 
     } 
     else 
     { 
      var userDetails = dbModel.USERS.Where(model => 
      model.vPassword == personalPage.usersModel.vPassword).FirstOrDefault(); 

      if (userDetails == null) 
      { 
       personalPage.usersModel.LoginErrorMessage = "Неверный пароль!"; 
       return View("~/Views/home/PersonalPage.cshtml", personalPage); 
      } 
      else 
      { 
       int iIdUsers = Convert.ToInt32(Session["iIdUsers"].ToString()); 

       //Change password here! 

       var query = from ord in dbModel.USERS 
          where ord.iIdUsers == iIdUsers 
          select ord; 

       foreach (var ord in query) 
       { 
        ord.vPassword = personalPage.usersModel.NewPassword; 
       } 

       try 
       { 
        dbModel.SaveChanges(); 
       } 
       catch(Exception exc) 
       { 
        personalPage.usersModel.ChangePasswordErrorMessage = exc.Message; 
       } 

       ViewBag.SuccessMessage = "Пароль был успешно изменен!"; 

       //Session["iIdUsers"] = userDetails.iIdUsers; 
       //Session["vNickName"] = userDetails.vNickName; 
       //return RedirectToAction("PersonalPage", "Home"); 

       return View("~/Views/home/PersonalPage.cshtml", personalPage); 
      } 
     } 
    } 

和视图代码,像autherize形式代码:

@using (Html.BeginForm("changePersonalInf", "PersonalPage", FormMethod.Post)) 
       { 
        @Html.AntiForgeryToken() 

        <tr> 
         <td><p>Город:</p></td> 
         <td>@Html.EditorFor(model => model.personalInfModel.vCity, new { htmlAttributes = new { @class = "form-control" } })</td> 
        </tr> 
        <tr> 
         <td><p>ФИО:</p></td> 
         <td>@Html.EditorFor(model => model.personalInfModel.vFIO, new { htmlAttributes = new { @class = "form-control" } })</td> 
        </tr> 
        <tr> 
         <td><p>Индекс:</p></td> 
         <td>@Html.EditorFor(model => model.personalInfModel.vIndex, new { htmlAttributes = new { @class = "form-control" } })</td> 
        </tr> 
        <tr> 
         <td><p>Населенный пункт:</p></td> 
         <td>@Html.EditorFor(model => model.personalInfModel.vLocality, new { htmlAttributes = new { @class = "form-control" } })</td> 
        </tr> 
        <tr> 
         <td><p>Улица:</p></td> 
         <td>@Html.EditorFor(model => model.personalInfModel.vStreet, new { htmlAttributes = new { @class = "form-control" } })</td> 
        </tr> 
        <tr> 
         <td><p>Дом/корпус/строение:</p></td> 
         <td>@Html.EditorFor(model => model.personalInfModel.vHome, new { htmlAttributes = new { @class = "form-control" } })</td> 
        </tr> 
        <tr> 
         <td><p>Квартира:</p></td> 
         <td>@Html.EditorFor(model => model.personalInfModel.vApartment, new { htmlAttributes = new { @class = "form-control" } })</td> 
        </tr> 
        <tr> 
         <td><p>Телефон:</p></td> 
         <td>@Html.EditorFor(model => model.personalInfModel.vPhone, new { htmlAttributes = new { @class = "form-control" } })</td> 
        </tr> 


        <tr> 
         <td><input type="submit" value="Изменить" class="btn-problem" /></td> 
         <td><input type="reset" value="Очистка" class="btn-problem" /></td> 
        </tr> 
       } 

回答

0

把改变密码块中的局部视图,改变的形式的Ajax形式:

@using (Html.BeginForm("changePersonalInf", "PersonalPage", FormMethod.Post)) { 

} 

@using (Ajax.BeginForm("changePersonalInf", "PersonalPage", null, new AjaxOptions { 
    UpdateTargetId = "id_of_your_change_password_block" 
}, new { role = "form", id = "AssignCoachForm" })) { 

} 

这会自动更新给定ID的块。或者,你可以自己在JavaScript中做到这一点,并有更多的控制权:

@using (Ajax.BeginForm("changePersonalInf", "PersonalPage", null, new AjaxOptions { 
    OnSuccess = "your_js_success_function(data);", 
    OnFailure = "your_js_failure_function();", 
}, new { role = "form", id = "AssignCoachForm" })) { 

} 
+0

它不工作!我再次给出了空指针异常的问题。你能告诉我例如,当我改变它时,代码将如何显示? – Zicise

+0

网上有很多例子。试着实现其中一个,如果你有问题,发布你的新代码(也许在一个新的问题),所以我们可以帮助你。 –

相关问题