c# - 将模型变量绑定(bind)到 ASP.NET MVC3 中的操作方法

标签 c# asp.net-mvc-3 binding

我有一个 Controller HomeController,它具有以下操作方法:

[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 如何描述 here但是我在 DisplayData 操作方法中得到的是 null。在我得到的源代码中:

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

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

ViewModel 被正确地传递给分部 View 。我做错了什么?

最佳答案

我通常将以下内容添加到我的模型中:

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

然后您可以在 Url.Action() 调用中简单地使用 RouteValues 属性。

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

或者,如果您更喜欢更少(显式)代码,请忽略模型更改并简单地执行以下操作:

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

关于c# - 将模型变量绑定(bind)到 ASP.NET MVC3 中的操作方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13085914/

相关文章:

c# - 在没有查找表的情况下将月份中的某一天转换为说话方式?

c# - LINQ to Entities 无法识别嵌套选择中的“System.Linq.IQueryable”方法

c# - 使用 Json.NET 的流利转换器/映射器?

asp.net-mvc-3 - Razor C# - 设置复选框值

mvvm - 如何将 ResourceDictionary 绑定(bind)到 ViewModelProperty

wpf - 如何更改 RadGridView 中特定单元格的格式

Java:检查哪些进程绑定(bind)到端口?

c# - VSTO - 是否可以同时拥有设计器功能区和 XML 功能区?

asp.net-mvc-3 - MvcSiteMapProvider 3.0 与 ASP.NET MVC3 和 Razor 的问题

asp.net-mvc - ASP.Net MVC 3 : Child Action and Redirect