C# asp.net MVC参数未传递

C# asp.net MVC参数未传递,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,在我的控制器中,我有以下端点: async Task<FileResult> DownloadSelection(AssignedDatabaseSelection selection) 异步任务下载选择(AssignedDatabaseSelection) 我的HTML看起来像: @if (Model.AssignedDatabaseSelections.Any()) { <table> @foreach (var selection in

在我的控制器中,我有以下端点:

async Task<FileResult> DownloadSelection(AssignedDatabaseSelection selection)
异步任务下载选择(AssignedDatabaseSelection)
我的HTML看起来像:

@if (Model.AssignedDatabaseSelections.Any())
{
    <table>
        @foreach (var selection in Model.AssignedDatabaseSelections)
        {
            <tr>
                <td>@selection.DisplayName</td>
                <td width="10%">
                    @Html.ActionLink(Strings.CsvLabel, "DownloadSelection", "Home", selection, null)
                </td>
            </tr>
        }
    </table>
}
@if(Model.AssignedDatabaseSelections.Any())
{
@foreach(模型中的var选择。AssignedDatabaseSelections)
{
@selection.DisplayName
@ActionLink(Strings.CsvLabel,“DownloadSelection”,“Home”,selection,null)
}
}
现在我想向控制器方法添加另一个参数:

async Task<FileResult> DownloadSelection(AssignedDatabaseSelection selection, DownloadFormat format)
异步任务下载选择(AssignedDatabaseSelection选择,下载格式)

@if(Model.AssignedDatabaseSelections.Any())
{
@foreach(模型中的var选择。AssignedDatabaseSelections)
{
@selection.DisplayName
@ActionLink(Strings.CsvLabel,“DownloadSelection”,“Home”,new{selection=selection,Format=downloadsformat.CSV},null)
@ActionLink(Strings.ExcelLabel,“DownloadSelection”,“Home”,新{selection=selection,Format=DownloadFormat.CSV},null)
}
}
当我检查元素时,我得到了以下信息:

<a href="/Home/DownloadSelection?selection=System.Data.Entity.DynamicProxies.AssignedDatabaseSele_D02B1D7B1220921CC4150FAA016EB8BFD5692B52C49949B0ECB80AA2F98E7355&amp;Format=CSV">Excel</a>


现在,格式已填充,但所选内容始终为空。我遗漏了什么?

下面是一个如何从对象创建具有属性的链接的示例。我在视图中包含创建新员工的代码,但这可以/应该在模型中:

@{ var emp = new Employee { Name = "Tom", Age = 44 }; }
@Html.ActionLink("Test", "Test2", "Account", new {Name = emp.Name, Age = emp.Age }, null)
请注意我是如何将
Employee
的每个属性传递到路由值的匿名对象中的

上述链接将与此操作配合使用。DefaultModeBinder将从链接中的查询字符串中获取名称,并将其分配给
员工的属性
,并将其传递给以下操作:

public ActionResult Test2(Employee emp)
{
    return null;
}

下面是一个如何从对象创建具有属性的链接的示例。我在视图中包含创建新员工的代码,但这可以/应该在模型中:

@{ var emp = new Employee { Name = "Tom", Age = 44 }; }
@Html.ActionLink("Test", "Test2", "Account", new {Name = emp.Name, Age = emp.Age }, null)
请注意我是如何将
Employee
的每个属性传递到路由值的匿名对象中的

上述链接将与此操作配合使用。DefaultModeBinder将从链接中的查询字符串中获取名称,并将其分配给
员工的属性
,并将其传递给以下操作:

public ActionResult Test2(Employee emp)
{
    return null;
}

在第一个示例中,第三个参数是一个复杂对象(typeof
AssignedDatabaseSelections
),该方法将正确地将对象的每个属性序列化为查询字符串。请注意,它只起作用,因为对象只包含简单属性

在第二个示例中,您将创建一个包含复杂对象的新对象。
ActionLink()
方法(以及所有生成路由/查询字符串值的方法)对对象中的每个属性调用
.ToString()
方法(因此可以得到类的名称),而不进行递归

如果要传回
AssignedDatabaseSelections
对象的所有属性和另一个属性,则需要生成一个包含
AssignedDatabaseSelections
的每个属性的新对象,例如(假设它包含属性
ID
Name

请注意,如果
AssignedDatabaseSelections
包含大量属性和/或更大的值,则可能会超过查询字符串限制并引发异常。更好的方法是传递
AssignedDatabaseSelection
ID
属性,如果需要该对象的其他属性,则在get方法中再次获取该对象

@Html.ActionLink(Strings.CsvLabel, "DownloadSelection", "Home",
    new { ID = selection.ID, Format = DownloadFormat.CSV }, null)

在第一个示例中,第三个参数是一个复杂对象(typeof
AssignedDatabaseSelections
),该方法将正确地将对象的每个属性序列化为查询字符串。请注意,它只起作用,因为对象只包含简单属性

在第二个示例中,您将创建一个包含复杂对象的新对象。
ActionLink()
方法(以及所有生成路由/查询字符串值的方法)对对象中的每个属性调用
.ToString()
方法(因此可以得到类的名称),而不进行递归

如果要传回
AssignedDatabaseSelections
对象的所有属性和另一个属性,则需要生成一个包含
AssignedDatabaseSelections
的每个属性的新对象,例如(假设它包含属性
ID
Name

请注意,如果
AssignedDatabaseSelections
包含大量属性和/或更大的值,则可能会超过查询字符串限制并引发异常。更好的方法是传递
AssignedDatabaseSelection
ID
属性,如果需要该对象的其他属性,则在get方法中再次获取该对象

@Html.ActionLink(Strings.CsvLabel, "DownloadSelection", "Home",
    new { ID = selection.ID, Format = DownloadFormat.CSV }, null)

如果不添加
格式
参数,您的选择是否有效?mh,当我将其传递到新对象(如new{selection=selection})时,它不会起作用,因此它与第二个参数无关。您如何分配
选择
?您的意思是在视图中?我从视图模型中读取它。因此,这意味着我必须将一个新的视图模型设为passt,这是控制器的passt?但有趣的是,第二个参数被正确地传递了,而不是第一个参数。如果不添加
格式
参数,您的选择是否有效?mh,当我在新对象(如new{selection=selection})中传递它时就不行了所以它与第二个参数无关。您如何分配
选择
?您的意思是在视图中?我从视图模型中读取它。因此,这意味着我必须使一个新的视图模型成为控制器的passt,但intere