2014-10-27 47 views
2

我正在嘗試將類型爲「EmployeeDocument」的項傳遞給我的操作,但所有值都作爲空值返回,我不確定原因。我試圖通過整個模型以及只是件,他們都是空的,我不知道爲什麼會發生這種情況。模型屬性作爲NULL傳遞到Action

這裏是我的看法是這樣的:

<table id="results-table" class="table table-striped table-bordered table-condensed"> 
     <thead> 
      <tr> 
       <th> 
        <u>@Html.DisplayName("Title")</u> 
       </th> 
       <th> 
        <u>@Html.DisplayName("Document Type")</u> 
       </th> 
       <th> 
        <u>@Html.DisplayName("Created By")</u> 
       </th> 
       <th> 
        <u>@Html.DisplayName("Created Date")</u> 
       </th> 
       <th style="width: 180px;"></th> 
      </tr> 
     </thead> 
     <tbody> 
      @foreach (var item in Model) 
      { 
       <tr> 
        <td> 
         @Html.DisplayFor(modelItem => item.Title) 
        </td> 
        <td> 
         @Html.DisplayFor(modelItem => item.DocumentType) 
        </td> 
        <td> 
         @Html.DisplayFor(modelItem => item.CreatedBy) 
        </td> 
        <td> 
         @Html.DisplayFor(modelItem => item.CreatedDate) 
        </td> 
        <td><a href="@item.FullUrl">View</a> | @Html.ActionLink("Replace", "ReplaceEmployeeDocument", "Employee",new {title = item.Title, doctype = item.DocumentType, createdDate = item.CreatedDate,createdBy = item.CreatedBy, fullUrl = item.FullUrl}) | @Html.ActionLink("Delete", "DeleteEmployeeDocument",new {fileName = item.FullUrl, employeeNo = item.EmployeeNumber})</td> 
       </tr> 
      } 
     </tbody> 
    </table> 

我專注在表中的替換操作鏈接。

這是我的動作是什麼樣子:

[HttpGet] 
    public ActionResult ReplaceEmployeeDocument(string title, string doctype, DateTime createdDate, string createdBy, string fullUrl) 
    { 
     var doc = new EmployeeDocument(); 
     return PartialView(doc); 
    } 

所有的動作參數爲null。這是爲什麼這樣的原因嗎?

+0

user3788671,您可以發佈正在調用ReplaceEmployeeDocument的ActionLink的?謝謝, 條例草案 – BillRuhl 2014-10-27 15:58:08

回答

2

正試圖回發對象的集合,爲了這個在foreach中的代碼工作,你需要如下隱藏投入使用for循環和索引的屬性:

@using (Html.BeginForm("ReplaceEmployeeDocument", "Controller")) 
{ 
    @for(var i = 0; i < Model.Count(); i++) 
       { 
        <tr> 
         <td> 
          @Html.HiddenFor(m => m[i].Title) 
          @Html.DisplayFor(m => m[i].Title) 
         </td> 
         <td> 
          @Html.HiddenFor(m => m[i].DocumentType) 
          @Html.DisplayFor(m => m[i].DocumentType) 
         </td> 
         <td> 
          @Html.HiddenFor(m => m[i].CreatedBy) 
          @Html.DisplayFor(m => m[i].CreatedBy) 
         </td> 
         <td> 
          @Html.HiddenFor(m => m[i].CreatedDate) 
          @Html.DisplayFor(m => m[i].CreatedDate) 
         </td> 
         <td><a href="@item.FullUrl">View</a> | <input type="submit" value="Replace"/></td> 
        </tr> 
       } 
} 

您還需要相應的方法後接受模型傳遞迴:

[HttpPost] 
public ActionResult ReplaceEmployeeDocument(EmployeeDocument model) 
{ 
    var doc = new EmployeeDocument(); 
    return PartialView(doc); 
} 
+0

我不認爲我可以在我的foreach有var i = 0。當我將它改爲for語句時。我需要更換物品嗎?與m [i]。? – user3788671 2014-10-27 16:08:03

+0

@ user3788671對不起,它應該是一個for,我已經更新它。 – hutchonoid 2014-10-27 16:10:03

+0

好吧,所以基本上我試圖做的是保持這個完整的模型除了一個名爲FullURL的屬性。當用戶按下表中的替換按鈕時,我想彈出一個框供用戶選擇一個文件,並用彈出框中的新文件替換FullUrl。這仍然是做到這一點的最佳方式嗎? – user3788671 2014-10-27 16:19:37

1

你似乎沒有使用任何@ Html.EditorFor,它會生成輸入字段,而且你沒有任何形式或javascript會在GET或POST方法中發送你的參數。因此,沒有任何字段被髮送到控制器中的方法。你應該wrape在

@Html.BeginForm() {}