2011-02-03 29 views
13

Tôi đã không thành công trong việc làm việc này!ASP.net MVC3 - Xem dao cạo và xem một phần với bài đăng của Ajax

Trong một cái nhìn ...

@model Project.Models.Account.ForgotPasswordModel 

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

<h2>ForgotPassword</h2> 

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

tôi khiến PartialView này ...

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

Và controller action này ...

[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; 

     } 

Tuy nhiên, mỗi lần duy nhất , chế độ xem chỉ trả về PartialView, không có trong bố cục. (Vì vậy, chỉ một phần của tôi là trên màn hình. Không có gì khác.) Tôi đã thử af ew những điều tôi đã tìm thấy trực tuyến ... http://www.compiledthoughts.com/2011/01/aspnet-mvc-razor-partial-views-with.html http://stackoverflow.com/questions/4655365/mvc3-submit-ajax-form

Nhưng không có gì đã khắc phục vấn đề này. Tôi đã thay đổi InsertionMode thành tất cả các giá trị không có thay đổi. Tôi đã thay đổi @ Html.Partial thành một khối mã như @ { Html.RenderPartial ("_ ForgotPasswordUserNameAjax", ViewData.Model); }.

Điều đó không hoạt động ...

Tôi đang hết ý tưởng (và kiên nhẫn)!

Vui lòng trợ giúp!

Trả lời

8

EDIT PEBKAC.

Tôi quên khi tôi nâng cấp dự án, tôi đã thêm tệp jquery.unobtrusive-ajax.js mới, nhưng không bao giờ đưa chúng vào trang _Layout.cshtml. Đã thêm thư viện đó để khắc phục sự cố. Xin lỗi các bạn!

Bài đăng gốc Tôi bắt đầu nghĩ đây là lỗi. Lấy lại dự án không chuyển đổi (MVC2) và chuyển nó thành MVC3. Tôi để lại tất cả các trang gốc trong định dạng aspx/ascx và chạy dự án. Tôi đã thử trang. Vấn đề tương tự vẫn xảy ra. Quay trở lại MVC2, và nó hoạt động tốt. Đã thử MVC3 một lần nữa và vấn đề lại xảy ra.

tôi chuyển đổi dự án sử dụng một trang rất giống với này ...

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

0

Tôi nghĩ chế độ xem "chính" cũng được gọi là Quên mật khẩu, giống như chế độ xem một phần.

Vì bộ điều khiển chỉ trả về một phần PartialViewResult, không có bố cục nào được sử dụng.

Tạo một hành động khác cho chế độ xem cha mẹ và cuộc gọi ajax.

+0

Vâng, tôi đang chuyển đổi dự án này từ một ứng dụng MVC2 để MVC3 trong Ngoài việc thay đổi tầm nhìn bao quát để Razor. Chúng hoạt động hoàn hảo tốt trước khi chuyển sang MVC3. Tôi đã mong đợi không phải thay đổi mã điều khiển (ngoại trừ việc đặt tên mới của các khung nhìn với dấu gạch dưới). :( – DavidAndroidDev

1

Vì bạn đang trở về chỉ một cái nhìn cục bộ, đó là tất cả những gì được xử lý. Chức năng này được tuân thủ nghiêm ngặt hơn trong MVC3 vì cách mà chế độ xem Dao cạo được xử lý.

Đơn giản chỉ cần thay đổi hành động điều khiển của bạn như sau:

[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

Trong khi điều này giúp tôi định dạng nhiều hơn, tôi hoàn toàn thiếu mọi thứ từ chế độ xem gốc của chế độ xem từng phần. Cấp, không nhiều, nhưng nếu có các trang khác có nhiều nội dung hơn, tôi buộc phải đặt nó vào xem một phần là gì? – DavidAndroidDev

Các vấn đề liên quan