2012-07-05 160 views
0

在我的主編輯視圖中,我有3個包含主視圖模型的子數據的部分視圖。我也有用於輸入和保存相關數據(如筆記等)的html文本框。 輸入項目或選擇並傳遞給控制器​​操作後,如何刷新我的部分視圖?這是迄今爲止的代碼,但它不起作用。我認爲我需要通過我的部分視圖傳回模型? 我正在使用ajax來調用我的控制器方法。 局部視圖:使用jQuery刷新局部視圖

@model cummins_db.Models.CaseComplaint 

<table width="100%"> 
<tr> 
    <td> 
     @Html.DisplayFor(modelItem => Model.ComplaintCode.ComplaintCodeName)  
    </td> 
    <td> 
    @Html.DisplayFor(modelItem => Model.ComplaintCode.ComplaintType) 
    </td> 

</tr> 

</table> 

這是局部視圖位於HTML:

<div class="editor-label"> 
    @Html.Label("Search and select a complaint code") 
</div> 
<div class="textarea-field"> 
    <input id = "CodeByNumber" type="text" /> 
</div> 
@Html.ActionLink("Refresh", "Edit", new { id = Model.CasesID }) 
    <table width="100%"> 
     <tr> 
      <th>Complaint Code</th> 
      <th>Complaint Description</th> 
     </tr> 
     @try 
      { 
      foreach (var comp_item in Model.CaseComplaint) 
       { 
       <div id="complaintlist"> 
       @Html.Partial("_CaseComplaintCodes", comp_item) 
       </div> 
       } 
      } 
     catch 
      { 

      } 

    </table> 

這裏是返回局部視圖控制器方法。

public ActionResult SelectForCase(int caseid, int compid, string compname) 
     { 

     if (ModelState.IsValid) 
      { 
      CaseComplaint c = new CaseComplaint 
      { 
       CasesID = caseid, 
       ComplaintCodeID = compid 
      }; 
      db.CaseComplaints.Add(c); 
      db.SaveChanges(); 
      } 

     return PartialView("_CaseComplaintCodes"); 

     } 

jQuery ajax調用控制器,它是一個自動完成功能選擇的一部分。

$('#CodeByNumber').autocomplete(
    { 

     source: function (request, response) { 
      $.ajax({ 
       url: "/Cases/CodeByNumber", type: "GET", dataType: "json", 
       data: { searchText: request.term, maxResults: 10 }, 
       contentType: "application/json; charset=utf-8", 
       success: function (data) { 
        response($.map(data, function (item) { 
         return { 
          label: item.ComplaintType, 
          value: item.ComplaintCodeName, 
          id: item.ComplaintCodeID 
         }; //return 
        }) //map 
          ); //response 

       } //success 

      }); //ajax 
     }, //source 

     select: function (event, ui) { 
      var url = "/Cases/SelectForCase"; 
      $.ajax({ 
       type: "GET", 
       dataType: "html", 
       url: url, 
       data: { caseid: $('#CaseID').val(), compid: ui.item.id, compname: ui.item.label }, 
       success: function (result) { $('#complaintlist').html(result); } 
      }); 

     }, 
     minLength: 1 
    }); 
+0

您是否嘗試過在'SelectForCase'行動的局部視圖返回'CaseCompliant'模式?例如'return PartialView(「_ CaseComplaintCodes」,c);'。當然,如果狀態無效,那麼返回一個臨時模型。 – 2012-07-05 21:01:19

+0

@Mario謝謝。我剛剛嘗試過,響應是沒有數據的html。 <表寬度= 「100%」> ​​ ​​ – Ryan 2012-07-05 21:10:09

+0

所以你得到空參數'SelectForCase(INT caseid,INT compid,串COMPNAME)'動作什麼時候打電話?還是你在空模型中發送?不明白它是否適用於你。 – 2012-07-05 21:14:49

回答

0

這是我落得這樣做,使其工作。我通過控制器動作改成這樣:

public ActionResult SelectForCase(int caseid, int compid) 
     { 

     if (ModelState.IsValid) 
      { 
      CaseComplaint c = new CaseComplaint 
      { 
       CasesID = caseid, 
       ComplaintCodeID = compid 
      }; 
      db.CaseComplaints.Add(c); 
      db.SaveChanges(); 

      var m = from d in db.CaseComplaints 
       where d.CasesID == caseid 
       select d; 

      return PartialView("_CaseComplaintCodes", m); 
      } 

     return PartialView("_CaseComplaintCodes"); 

     } 

它現在

1

如若局部視圖不會如下:

@model cummins_db.Models.CaseComplaint 

<table width="100%"> 
    <tr> 
     <td> 
      @Html.DisplayFor(m => m.ComplaintCodeName)  
     </td> 
     <td> 
      @Html.DisplayFor(m => m.ComplaintType) 
     </td> 
    </tr> 
</table> 
+0

CaseComplaint實際上是一個多對多的聯結表。 – Ryan 2012-07-05 21:28:28