2011-10-10 139 views
1

如果您将匿名对象传递回控制器,它会通过查看匿名对象属性名称来填充控制器参数 - 那么如何将相关对象的属性传回给我的模型,以便默认值绑定可以绑定他们?ASP .NET MVC 3 - 将参数从视图传递到控制器

例如:

型号:

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" }) 

请帮助!

回答

0

答案是创建一个自定义ModelBinder和ModelBinderProvider。

1

您可以使用以下过载:

@Html.ActionLink( 
    "link text",        // linkText 
    "Index",         // actionName 
    "MyController",       // controllerName 
    new RouteValueDictionary {    // routeData 
     { "MyItem.Name", "example" } 
    }, 
    null          // htmlAttributes 
) 
+0

不错的想法,但不行,我害怕。 – PeteGO

2

你试过:

@Html.ActionLink("Index", "MyController", new { name = @Model.MyItem.Name }) 

而且在操作方法:

public ActionResult Index(string name) 
{ 
    return View(); 
} 
+0

我知道我可以这样做,但我认为默认模型联编程序可以处理继承,所以我必须有一个参数是我的视图模型对象。 – PeteGO

1

我想你可能误解“了将对象从视图传递给控制器​​'。 这不是你传递对象 - 你只是在页面中呈现一个链接(锚定标记)。当用户点击链接时,请求实际上来自浏览器。没有'服务器端对象传递'正在进行。

链接必须包含服务器端(在控制器中)需要的所有参数作为查询字符串参数。

我认为你真正想要做什么或者是:

  1. 呈现一个表格并提交,或

  2. 通只有你所需要的数据的ID,并在控制器检索它(例如从DB)

相关问题