1

我的控制器中有这个方法,称为“DirectorySearchController”

public ActionResult PersonDetails(FoundPerson person) //for some reason person is null here
{
    DirectoryViewModel viewModel = new DirectoryViewModel();
    viewModel.person = person;
    return View(viewModel);
}

当我使用 Html.Actionlink 从视图向它传递一些参数时,它返回一个空值

<ul data-role="listview">
    @if (ViewBag.Message == "NO RESULTS FOUND")
    {
        <li>@ViewBag.Message</li>
    }
    else
    {
            foreach (var employee in Model)
            {
                <li>
                    <div class="ui-grid-b">
                        <div class="ui-block-a" style="width:20%; vertical-align:middle"><img src="@employee.pictureURL" width="40px" height="40px"/></div>
                        <div class="ui-block-b" style="width:80%; vertical-align:middle">@Html.ActionLink(employee.name, "PersonDetails", "DirectorySearch", new { person = employee}, null)</div>
                    </div>
                </li>
            }
    }


</ul>

但有趣的是,当我在不使用“new”关键字的情况下传递参数时,它传递了正确的值。但是,问题是我需要传递多个参数,所以我需要使用“new”关键字。

<div class="ui-block-b" style="width:80%; vertical-align:middle">@Html.ActionLink(employee.name, "PersonDetails", "DirectorySearch", employee, null)</div>
4

2 回答 2

2

我认为您没有使用正确的 ActionLink 重载。尝试其中任何一个

第一个应该主要根据您的情况工作:

<%=Html.ActionLink(employee.Name, "PersonalDetails", "DirectorySearch", new { person = employee }, null)%>

<%=Html.ActionLink(employee.Name, "PersonalDetails", new {person = employee})%>

这里只是一个建议。理想情况下,我会使用输入提交将数据发布到控制器。您可以在控制器端使用模型类或 FormCollection 来检索您在视图中输入的值。

于 2012-07-11T16:08:41.333 回答
1

您不应将模型传递给控制器​​操作,如new { person = employee }. Html.ActionLink因为发生的情况是,当您生成操作链接时,您传递的对象将转换为RouteValueDictionary将传递给的对象,UrlHelper以将路由字典值附加到链接。

当您像在第一种情况下一样传递一个匿名对象时,RouteValueDictionary存储一个带有名称的参数person并设置它看到您传递了一个对象的值,它无法序列化完整的实例并将其设置为单个属性,所以它将模型的类型名称设置Employee为人员的值。因此,您将看到生成的链接为http://someserver/DirectorySearch/PersonDetails?person=Models.Employee

如果您像在第二种情况下那样传递一个实例,那么它会迭代所有属性并创建键/值对,而键是属性名称,值是属性值,最后它们都作为查询字符串附加到链接中。如果生成的 url 为http://someserver/DirectorySearch/PersonDetails?Property1=Value1&Property2=Value2

正确的

@Html.ActionLink(employee.name, "PersonDetails", "DirectorySearch", employee, null)

错误的

@Html.ActionLink(employee.name, "PersonDetails", "DirectorySearch", new {person = employee }, null)

您可以使用匿名对象将路由参数传递给操作链接,但此时您不应传递引用类型,而是传递整数、字符串等内置类型。

前任。

@Html.ActionLink(employee.name, "PersonDetails", "DirectorySearch", 
new { Id = 23, Name = "Mark" }, null)
于 2012-07-11T16:14:39.253 回答