2011-02-03 13 views
13

¡No he tenido éxito en hacer que esto funcione!ASP.net MVC3 - Vistas de maquinilla de afeitar y vistas parciales con Atrasados ​​de Ajax

En una vista ...

@model Project.Models.Account.ForgotPasswordModel 

@{ 
    ViewBag.Title = "Forgot Password"; 
} 

<h2>ForgotPassword</h2> 

<span id='@ViewBag.ReplaceID'> 
    @Html.Partial("_ForgotPasswordUserNameAjax", ViewData.Model) 
</span> 

me hacen esta PartialView ...

@model Project.Models.Account.ForgotPasswordModel 

@{ 
    this.Layout = null; 
} 

@using (Ajax.BeginForm("ForgotPassword", new AjaxOptions() { UpdateTargetId = ViewBag.ReplaceID, InsertionMode = InsertionMode.InsertAfter })) 
{ 
    @Html.ValidationSummary(true, "Forgot Password was unsuccessful. Please correct the errors and try again.") 
    <div id="login" class="box"> 
      <fieldset> 
      <h2>Account Information</h2> 
      <div class="inside"> 
       <div class="editor-label"> 
        @Html.LabelFor(m => m.Username) 
       </div> 
       <div class="editor-field"> 
        @Html.TextBoxFor(m => m.Username) 
        <br /> 
        @Html.ValidationMessageFor(m => m.Username) 
        <br /> 
       </div> 

       <p> 
        <input type="submit" value='Submit' /> 
       </p> 
      </div> 
     </fieldset> 
    </div> 
} 

Y esta acción del controlador ...

[HttpPost] 
     public PartialViewResult ForgotPassword(ForgotPasswordModel model) 
     { 

      if (String.IsNullOrEmpty(model.Username)) 
      { 
       ModelState.AddModelError("Username", ForgotPasswordStrings.USER_NAME_REQUIRED); 
      } 
      else 
      { 
       bool isGood = false; 
       model.Question = this._security.ValidateUserNameGetSecurityQuestion(model.Username, out isGood); 

       if (!isGood) 
       { 
        ModelState.AddModelError("Username", ForgotPasswordStrings.USER_NAME_INVALID); 
       } 

      } 
      PartialViewResult retVal = null; 
      if (ModelState.IsValid) 
      { 

       retVal = PartialView("ForgotPasswordAnswerAjax", model); 
      } 
      else 
      { 
       retVal = PartialView("_ForgotPasswordUserNameAjax", model); 
      } 

      return retVal; 

     } 

Sin embargo, cada vez , la vista solo devuelve el PartialView, que no se encuentra en el diseño. (Así que solo mi PartialView está en la pantalla. Nada más.) Lo intenté. ew cosas que he encontrado en Internet ... http://www.compiledthoughts.com/2011/01/aspnet-mvc-razor-partial-views-with.html http://stackoverflow.com/questions/4655365/mvc3-submit-ajax-form

Pero nada ha solucionado este problema. Cambié el modo de inserción a todos los valores sin cambios. Cambié @ Html.Partial a un bloque de código como @ { Html.RenderPartial ("_ ForgotPasswordUserNameAjax", ViewData.Model); }.

eso no funciona ...

Me estoy quedando sin ideas (y paciencia)!

Por favor ayuda!

Respuesta

8

EDIT PEBKAC.

Olvidé cuando actualicé el proyecto, agregué los nuevos archivos jquery.unobtrusive-ajax.js, pero nunca los incluí en la página _Layout.cshtml. Agregó que la biblioteca solucionó el problema. ¡Lo siento chicos!

Original Post Empiezo a pensar que esto es un error. Tomando el proyecto no convertido de nuevo (MVC2) y convirtiéndolo a MVC3. Dejé todas las páginas originales en el formato aspx/ascx y ejecuté el proyecto. Probé la página. El mismo problema aún ocurre. Volviendo a MVC2, y funciona bien. Intenté MVC3 una vez más, y el problema vuelve a suceder.

que convierten el proyecto utilizando una página muy similar a este ...

http://mattsieker.com/index.php/2010/11/21/converting-asp-net-mvc2-project-to-mvc3/

0

Creo que la vista "principal" también se llama ForgotPassword, al igual que las vistas parciales.

Dado que el controlador devuelve solo un PartialViewResult, no se utiliza el diseño.

Crea una acción diferente para la vista primaria y las llamadas ajax.

+0

Bueno, yo estoy convirtiendo este proyecto desde una aplicación MVC2 a MVC3 además de cambiar los puntos de vista a la maquinilla de afeitar. Funcionaron perfectamente bien antes de cambiar a MVC3. Esperaba no tener que cambiar el código del controlador (a excepción de la nueva denominación de las vistas con guiones bajos). :( – DavidAndroidDev

1

Dado que va a devolver una visión parcial, que es todo lo que se procesa. Esta funcionalidad se cumple más estrictamente en MVC3 debido a la forma en que se procesan las vistas de Razor.

basta con cambiar su controlador de la acción a lo siguiente:

[HttpPost] 
     public ActionResult ForgotPassword(ForgotPasswordModel model) 
     { 

      if (String.IsNullOrEmpty(model.Username)) 
      { 
       ModelState.AddModelError("Username", ForgotPasswordStrings.USER_NAME_REQUIRED); 
      } 
      else 
      { 
       bool isGood = false; 
       model.Question = this._security.ValidateUserNameGetSecurityQuestion(model.Username, out isGood); 

       if (!isGood) 
       { 
        ModelState.AddModelError("Username", ForgotPasswordStrings.USER_NAME_INVALID); 
       } 

      } 
      PartialViewResult retVal = null; 
      if (ModelState.IsValid) 
      { 

       retVal = View("ForgotPasswordAnswerAjax", model); 
      } 
      else 
      { 
       retVal = PartialView("_ForgotPasswordUserNameAjax", model); 
      } 

      return retVal; 

     } 
+0

Si bien esto me dio más formateo, me falta completamente todo desde la vista principal de la vista parcial. De acuerdo, no es mucho, pero si hay otras páginas con más contenido, me veo obligado a ponerlo en el vista parcial? ¿De qué sirve la vista parcial? – DavidAndroidDev

Cuestiones relacionadas