我正在尝试传递一个类型为" EmployeeDocument"的项目。我的行动,但所有的价值观都是空的,我不知道为什么。我试过传递整个模型以及只是碎片,它们都是空的,我不知道为什么会这样。
以下是我的观点:
<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 :(得分:2)
您正在尝试回发一组对象,为了使其工作,您需要使用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>
}
}
您还需要一个相应的post方法来接受传回的模型:
[HttpPost]
public ActionResult ReplaceEmployeeDocument(EmployeeDocument model)
{
var doc = new EmployeeDocument();
return PartialView(doc);
}
答案 1 :(得分:1)
您似乎没有使用任何会生成输入字段的@ Html.EditorFor,并且您没有任何可以在GET或POST方法中发送您的参数的表单或javascript。因此,您的所有字段都不会发送到控制器中的方法。你应该在
中删除foreach中的代码@Html.BeginForm() {}