2017-07-01 3 views
0

Gute Nachrichten alle. Ich habe wieder eine Frage. Ich habe Seite mit persönlichen Informationen blockieren, persönliche Informationen bearbeiten Block und Passwort Block. Ich brauche nur den Passwortblock nach dem Klick auf den Button neu zu laden. Aber ich habe ein Problem, wenn ich auf die Schaltfläche geklickt habe, versuche meine Seite alle Seite neu zu laden. Und erfordert, die Methode des Ladens von persönlichen und Kennwortinformationen erneut aufzurufen. Aber ich brauche nur Nachrichten zu zeigen und Dinge mit Passwörtern im Passwortblock zu tun, ohne den persönlichen Informationsblock zu beeinflussen. (Ich muss auch mit dem persönlichen Informationsblock arbeiten, ohne den Passwortblock zu beeinflussen, aber ich denke, es wird die gleiche Antwort unten sein).laden Sie einen Teil der Seite nach dem Klicken auf Schaltfläche in der Form 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); 
      } 
     } 
    } 

und View-Code, Code wie autherize Form:

@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> 
       } 

Antwort

0

Setzen Sie das Passwort ändern Block in einer Teilansicht und ändern Sie das Formular zu Ajax Form:

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

} 

bis

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

} 

Dies aktualisiert automatisch den Block mit der angegebenen ID. Alternativ können Sie das auch selbst in JavaScript tun und mehr Kontrolle darüber haben:

@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

Es funktioniert nicht! Ich gab erneut ein Problem mit Nullzeigerausnahme. Kannst du mir beispielsweise zeigen, wie dieser Code angezeigt wird, wenn ich ihn ändere? – Zicise

+0

Es gibt Tonnen von Beispielen online. Versuchen Sie, eines davon zu implementieren, und wenn Sie Probleme haben, geben Sie Ihren neuen Code (vielleicht in einer neuen Frage) ein, damit wir Ihnen helfen können. –

Verwandte Themen