绑定模型变量在ASP.NET MVC3的操作方法(Binding the Model variabl

2019-07-02 16:47发布

我有一个控制器HomeController有以下action method

[HttpPost] 
public ActionResult DisplayData(MyViewModel myViewModel)
{
   // Do something with myViewModel           
}

ViewModel

public class MyViewModel
{
    public string Name { get; set; }
    public string Surname { get; set; }
    public bool IsPeriod { get; set; }
}

而下面的View

@model AppName.ViewModels.MyViewModel

@{ Html.RenderPartial("MyPartialView", Model);  }

<img src="@Url.Action("DisplayData", "Home", new { myViewModel = Model })" alt="Image" />

我用它是如何描述的Url.Action 这里 ,但我所得到的DisplayData操作方法为空。 在源代码中我得到:

<img src="/Home/DisplayData?filters=AppName.ViewModels.MyViewModel" alt="Image" />

所以它不是实际传递值的类型。

ViewModel代替被正确地传递到局部视图。 我究竟做错了什么?

Answer 1:

我通常会添加以下到我的模型:

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;
        }
    }
}

然后,你可以简单地使用RouteValues财产在你Url.Action()调用。

<img src="@Url.Action("DisplayData", "Home", Model.RouteValues)" alt="Image" />

或者,如果你喜欢更小(明确的)代码,忽略模式的变化,只是这样做:

<img src="@Url.Action("DisplayData", "Home", new RouteValueDictionary(Model)" alt="Image" />


Answer 2:

它不会序列化整个对象的查询字符串必须显式设置每个值,即

new { nameFilter = @Model.Name, @Model.Surname, @Model.IsPeriod }

您只需要提供nameFilter如果您的路由你的参数不叫名字。



Answer 3:

您正在试图创建一个使用一个完整的视图模型的IMG SRC的链接,我不认为这是你想要真的是。

相反,你会通过什么的模型表示为纽带(过滤器)上的查询字符串参数的ID。 因此,例如使用...

<img src="@Url.Action("DisplayData", "Home", new { filters = Model.Id })" alt="Image" />

为了使像...

<img src="/Home/DisplayData?filters=1" alt="Image" />

然后你可以使用ID在你的行动,查找任何资源是你试图显示。



Answer 4:

如果你想传递模型,你所描述,那么你必须重写你的ViewModel类的ToString()方法的方式,因为这就是为什么通过你的视图模型对象Url.Action方法返回这种联系的原因。 另外,如果你想通过您的视图模型来操作,必须在形式准备链接的“http:// URL /动作名称= X&姓= Y&IsPerion = 0?”这样ModelBinder的可识别它,并绑定到操作参数。



Answer 5:

你试试这个,

<img src="@Url.Action("DisplayData", "Home", Model)" alt="Image" />


文章来源: Binding the Model variable to an Action Method in ASP.NET MVC3