模型属性作为空值传递给Action

时间:2014-10-27 15:48:58

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor

我正在尝试传递一个类型为" 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。是否有这样的原因?

2 个答案:

答案 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() {}