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&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