簡體   English   中英

將Model變量綁定到ASP.NET MVC3中的Action方法

[英]Binding the Model variable to an Action Method in ASP.NET MVC3

我有一個控制器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操作方法中得到的是null。 在我得到的源代碼中:

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

所以它實際上是傳遞類型而不是值。

而是將ViewModel正確傳遞給局部視圖。 我究竟做錯了什么?

我通常將以下內容添加到我的模型中:

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" />

它不會將整個對象序列化為查詢字符串,您必須明確設置每個值,即

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

如果您的參數在路由中未被稱為Name,則只需提供nameFilter。

您正在嘗試使用整個視圖模型創建img src鏈接,我認為這不是您想要的。

相反,您將傳遞模型表示的任何ID作為鏈接上的查詢字符串參數(過濾器)。 所以例如使用......

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

要呈現類似......

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

然后,您可以在操作中使用Id來查找您要顯示的資源。

如果要按照描述的方式傳遞模型,則必須覆蓋ViewModel類的ToString()方法,因為這是將ViewModel對象傳遞給Url.Action方法返回此類鏈接的原因。 此外,如果要將ViewModel傳遞給Action,則必須以“http:// url / Action?Name = x&Surname = y&IsPerion = 0”的形式准備鏈接,以便ModelBinder識別它並綁定到Action參數。

你試過這個嗎?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM