ASP .NET MVC 3 - 将参数从视图传递到控制器
Posted
技术标签:
【中文标题】ASP .NET MVC 3 - 将参数从视图传递到控制器【英文标题】:ASP .NET MVC 3 - Passing Parameters from View to Controller 【发布时间】:2011-10-10 19:21:48 【问题描述】:如果您将匿名对象传递回控制器,它会通过查看匿名对象属性名称来填充控制器参数 - 那么如何将相关对象的属性传递回我的模型,以便默认值绑定器可以绑定它们?
例如:
型号:
public class MyViewModel
public MyItem MyItem get; set;
public class MyItem
public string Name get; set;
控制器:
public ActionResult Index(MyViewModel model)
return View(model);
在视图中,我想将 MyItem.Name 传回来,这怎么可能?我试过了:
@html.ActionLinke("Index", "MyController", new name = "example" )
和
@Html.ActionLinke("Index", "MyController", new myItem_Name = "example" )
请帮忙!
【问题讨论】:
【参考方案1】:你试过了吗:
@Html.ActionLink("Index", "MyController", new name = @Model.MyItem.Name )
而在action方法中:
public ActionResult Index(string name)
return View();
【讨论】:
我知道我可以这样做,但我认为默认模型绑定器可以处理继承,所以我所要做的就是我的视图模型对象。【参考方案2】:您可以使用以下重载:
@Html.ActionLink(
"link text", // linkText
"Index", // actionName
"MyController", // controllerName
new RouteValueDictionary // routeData
"MyItem.Name", "example"
,
null // htmlAttributes
)
【讨论】:
【参考方案3】:我认为您可能误解了“对象从视图传递到控制器”。 这不是您在传递对象 - 您只是在页面中呈现一个链接(锚标记)。当用户单击链接时,请求实际上来自浏览器。没有发生“服务器端对象传递”。
该链接必须包含您在服务器端(在控制器中)需要的所有参数作为查询字符串参数。
我认为你真正想做的是:
渲染表单并提交,或者
仅传递您需要的数据的 id 并在控制器中检索它(例如从 DB 中)
【讨论】:
【参考方案4】:答案是创建自定义 ModelBinder 和 ModelBinderProvider。
【讨论】:
以上是关于ASP .NET MVC 3 - 将参数从视图传递到控制器的主要内容,如果未能解决你的问题,请参考以下文章
Asp.Net mvc - 将最后创建的 id 从操作传递到部分视图
如何将项目列表从视图传递到控制器(ASP.NET MVC 4)