Cic*_*ami 2 c# binding asp.net-mvc-3
我有一个控制器,HomeController具有以下内容action method:
[HttpPost]
public ActionResult DisplayData(MyViewModel myViewModel)
{
// Do something with myViewModel
}
Run Code Online (Sandbox Code Playgroud)
的ViewModel:
public class MyViewModel
{
public string Name { get; set; }
public string Surname { get; set; }
public bool IsPeriod { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
以下 View
@model AppName.ViewModels.MyViewModel
@{ Html.RenderPartial("MyPartialView", Model); }
<img src="@Url.Action("DisplayData", "Home", new { myViewModel = Model })" alt="Image" />
Run Code Online (Sandbox Code Playgroud)
我使用Url.Action如何在此处描述,但我在DisplayData操作方法中得到的是null.在我得到的源代码中:
<img src="/Home/DisplayData?filters=AppName.ViewModels.MyViewModel" alt="Image" />
Run Code Online (Sandbox Code Playgroud)
所以它实际上是传递类型而不是值.
的ViewModel,而不是被正确地传递到局部视图.我究竟做错了什么?
nuV*_*oid 13
我通常将以下内容添加到我的模型中:
public class MyViewModel
{
public string Name { get; set; }
public string Surname { get; set; }
public bool IsPeriod { get; set; }
public RouteValueDictionary RouteValues
{
get
{
var rvd = new RouteValueDictionary();
rvd["name"] = Name;
rvd["surname"] = Surname;
rvd["isPeriod"] = IsPeriod;
return rvd;
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,您只需在Url.Action()调用中使用RouteValues属性即可.
<img src="@Url.Action("DisplayData", "Home", Model.RouteValues)" alt="Image" />
Run Code Online (Sandbox Code Playgroud)
或者,如果您更喜欢较少(显式)代码,请忽略模型更改并简单地执行此操作:
<img src="@Url.Action("DisplayData", "Home", new RouteValueDictionary(Model)" alt="Image" />
Run Code Online (Sandbox Code Playgroud)