6

Điều kỳ lạ xảy ra trên một trong các ứng dụng ASP.NET MVC 3 của tôi.xem một phần mà không có các thuộc tính xác thực (ASP.NET MVC 3)

Tôi đang tìm nạp hàng chèn qua jQuery Ajax api và không có vấn đề gì với điều đó. Nhưng khi tôi nhận được một phần xem lại cần thiết, nó sẽ đến mà không có các thuộc tính xác nhận hợp lệ và tôi không thể rebind xác nhận cho các hàng đó.

Đây là những gì tôi nhận được là phản ứng ajax:

<input type="hidden" name="accommPropertyPeriods.index" autocomplete="off" value="ccaa15b3-76f1-4215-8bb5-a62d700bfc1e" /> 
    <table style="width:100%;"> 
    <tr> 
     <td> 
      <div class="editor-field"> 
       <select class="chzn-select-deselect" data-placeholder="Choose an Alias..." id="accommPropertyPeriods_ccaa15b3-76f1-4215-8bb5-a62d700bfc1e__AccommPropertySeasonPeriodAliasID" name="accommPropertyPeriods[ccaa15b3-76f1-4215-8bb5-a62d700bfc1e].AccommPropertySeasonPeriodAliasID" style="min-width:100px;"><option value="302">A</option> 
<option value="303">B</option> 
<option value="304">C</option> 
<option value="305">D</option> 
</select> 

      </div> 
     </td> 
     <td> 
      <div class="editor-field"> 
       <input class="datefield" id="accommPropertyPeriods_ccaa15b3-76f1-4215-8bb5-a62d700bfc1e__PeriodStartsAt" name="accommPropertyPeriods[ccaa15b3-76f1-4215-8bb5-a62d700bfc1e].PeriodStartsAt" type="text" value="" /> 

      </div> 
     </td> 
     <td> 
      <div class="editor-field"> 
       <input class="datefield" id="accommPropertyPeriods_ccaa15b3-76f1-4215-8bb5-a62d700bfc1e__PeriodEndsAt" name="accommPropertyPeriods[ccaa15b3-76f1-4215-8bb5-a62d700bfc1e].PeriodEndsAt" type="text" value="" /> 

      </div> 
     </td> 
    </tr> 
    </table> 

Dưới đây là những gì tôi nên nhận:

<input type="hidden" name="accommPropertyPeriods.index" autocomplete="off" value="84ddd0f5-a3e2-4f10-8e67-f32528c6393d" /> 
    <table style="width:100%;"> 
    <tr> 
     <td> 
      <div class="editor-field"> 
       <select class="chzn-select-deselect" data-placeholder="Choose an Alias..." data-val="true" data-val-number="The field AccommPropertySeasonPeriodAliasID must be a number." data-val-required="The AccommPropertySeasonPeriodAliasID field is required." id="accommPropertyPeriods_84ddd0f5-a3e2-4f10-8e67-f32528c6393d__AccommPropertySeasonPeriodAliasID" name="accommPropertyPeriods[84ddd0f5-a3e2-4f10-8e67-f32528c6393d].AccommPropertySeasonPeriodAliasID" style="min-width:100px;"><option value="302">A</option> 
<option value="303">B</option> 
<option value="304">C</option> 
<option value="305">D</option> 
</select> 
       <span class="field-validation-valid" data-valmsg-for="accommPropertyPeriods[84ddd0f5-a3e2-4f10-8e67-f32528c6393d].AccommPropertySeasonPeriodAliasID" data-valmsg-replace="false">*</span> 
      </div> 
     </td> 
     <td> 
      <div class="editor-field"> 
       <input class="datefield" data-val="true" data-val-required="The PeriodStartsAt field is required." id="accommPropertyPeriods_84ddd0f5-a3e2-4f10-8e67-f32528c6393d__PeriodStartsAt" name="accommPropertyPeriods[84ddd0f5-a3e2-4f10-8e67-f32528c6393d].PeriodStartsAt" type="text" value="" /> 
       <span class="field-validation-valid" data-valmsg-for="accommPropertyPeriods[84ddd0f5-a3e2-4f10-8e67-f32528c6393d].PeriodEndsAt" data-valmsg-replace="false">*</span> 
      </div> 
     </td> 
     <td> 
      <div class="editor-field"> 
       <input class="datefield" data-val="true" data-val-required="The PeriodEndsAt field is required." id="accommPropertyPeriods_84ddd0f5-a3e2-4f10-8e67-f32528c6393d__PeriodEndsAt" name="accommPropertyPeriods[84ddd0f5-a3e2-4f10-8e67-f32528c6393d].PeriodEndsAt" type="text" value="" /> 
       <span class="field-validation-valid" data-valmsg-for="accommPropertyPeriods[84ddd0f5-a3e2-4f10-8e67-f32528c6393d].PeriodEndsAt" data-valmsg-replace="false">*</span> 
      </div> 
     </td> 
    </tr> 
    </table> 

GUID không phải như vậy. Tôi đang làm cái gọi là liên kết không tuần tự.

Dưới đây là những hành động mà tôi đang gọi qua jquery ajax để có được một hàng chèn mới:

[HttpPost] 
    public PartialViewResult accommPropertySeasonPeriodCreatePartialView(int id, int subid) { 

     //some other stuff going on here. non-related to partial view. 

     return PartialView("_AccommPropertySeasonPeriodCreatePartialView"); 
    } 

Tôi gần như ra khỏi tâm trí của tôi để tìm ra lý do tại sao điều này xảy ra. Bất kỳ ý tưởng?

Trả lời

10

Số trợ giúp Html.* chẳng hạn như Html.TextBoxFor, Html.CheckBoxFor, ... phát ra các thuộc tính xác thực chỉ khi được sử dụng bên trong biểu mẫu. Vì vậy, hãy chắc chắn rằng bạn quấn chúng trong một cuộc gọi Html.BeginForm. Theo như xác nhận phía khách hàng là có liên quan, bạn nên gọi phương thức jQuery.validator.unobtrusive.parse sau khi bạn cập nhật DOM của mình để đăng ký lại xác thực ứng dụng khách. Và yet another article.

Nếu bạn không có một hình thức bạn có thể gian lận và đưa những điều sau đây trong phần:

@model MyViewModel 
@{ 
    ViewContext.FormContext = new FormContext(); 
} 
@Html.EditorFor(x => x.Foo) 

Bây giờ helper sẽ phát ra đĩa dữ liệu * xác nhận thuộc tính trên các lĩnh vực đầu vào.

+0

oww, nó sẽ là một vấn đề. Tôi đã có biểu mẫu trên chế độ xem chính của mình. Bất kỳ cách nào khác để có được xung quanh với điều này tự động hoặc tôi nên ghi đè lên các mẫu biên tập? – tugberk

+0

@tugberk, xem cập nhật của tôi về cách tạo thủ công FormContext trong phần. –

+0

Tuyệt vời! Hoàn toàn làm việc. Chỉ cần hiểu nó, những gì chính xác này tinh chỉnh cho khuôn khổ (hoặc các động cơ templating?) Để nó hiểu để phát ra dữ liệu- * xác nhận thuộc tính trên lĩnh vực đầu vào? – tugberk