2017-07-14 39 views
0

我有這段代碼,它產生一個記錄表(名稱和信息),每行應該有一個編輯按鈕,它打開一個模式彈出窗口,允許編輯記錄的信息部分。
1. HTML視圖如何將模型實例從表格傳遞給模態彈出?

@model Właściwy.Models.BoardViewModel 
... 
@foreach (var p in Model.LoansNumerable) 
       { 
       <tr> 
        <td>@p.Name</td> 
        <td>@p.Info</td> 
        <td><button 
onclick="javascript:openModal('ModalEdit')">Edit</button></td> 
       </tr> 

2.同一CSHTML文件,但上述

<div class="ModalEdit"> 
        @using (Html.BeginForm("Loan", "Controller", FormMethod.Post)) 
        { 
         <label>Edit info: </label> 
         @Html.EditorFor(x => x.LoanElement.Info)<br /> 
         <input type="submit" value="Edit" class="button- 
submit" formaction="~/Controller/Info/@Model.LoanElement"/> 
        } 
       </div> 

我如何通過有關記錄,我想信息表中的模式彈出的編輯記錄的代碼從第一段代碼中的表編輯到模式,這將允許我從表中將所選記錄和模式中記錄的已編輯部分發送到控制器,以便將它放入SQL數據庫中?因爲模態代碼中的「Controller/Info/@Model.LoanElement」部分只通過編輯的部分,其餘部分變爲空值

+0

使用Javascript將是你最好的選擇。使用剃鬚刀不起作用,因爲它只在服務器上執行,在頁面顯示之前執行。 Javascript是你操作頁面一旦使用的方式。您已經開始使用腳本來顯示模式,您還需要腳本來獲取數據(通過將內容從HTML中提取出來,或者使用ajax通過其ID來獲取相關對象從服務器,特別是如果有更多的屬性比表中顯示)。 – ADyson

回答

1

我認爲你應該在你的html表中生成一個ajax鏈接,局部視圖。事情是這樣的:

@foreach (var p in Model.LoansNumerable) 
{ 
    <tr> 
     <td>@p.Name</td> 
     <td>@p.Info</td> 
     <td> 
      @Ajax.ActionLink("Edit", "Edit", new { id = @p.Id }, new AjaxOptions() 
       { 
         InsertionMode = InsertionMode.Replace, 
        UpdateTargetId = "idOfContainerInsideModal" 
       }) 
     </td> 
    </tr> 
} 

你應該有一個編輯動作,渲染與形式的局部視圖。

public ActionResult Edit(int id) 
{ 
    var model = //get model from id 
    return PartialView("Edit", model); 
} 

然後,將您的編輯視圖與表單一起放入您的模型中。我認爲你應該使用AjaxForm,提交數據,關閉模式,並在數據提交後更新表格。

@using (Ajax.BeginForm("PostEdit", new AjaxOptions 
    { 
     OnSuccess = "reload Page function", 
     HttpMethod = "POST" 
    })) 
{ 
     <label>Edit info: </label> 
    @Html.EditorFor(x => x.LoanElement.Info)<br /> 
    <input type="submit" value="Edit" class="button-submit"/> 
}