将Model变量绑定到ASP.NET MVC3中的Action方法

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)