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 在视图和控制器之间传递参数

Asp.Net mvc - 将最后创建的 id 从操作传递到部分视图

将模型传递给 ASP.NET Core MVC 中的视图

如何将项目列表从视图传递到控制器(ASP.NET MVC 4)

ASP.Net MVC 将数据从视图传递到不同文件夹中的控制器

ASP.NET MVC - 使用 C# 将引用不同程序集的模型从控制器传递到视图