[英].NET MVC Updating the View with a model property
我使用本文中描述的方法來創建下拉列表。
該模型
public class IceCreamFlavor
{
public int Id { get; set; }
public string Name { get; set; }
}
視圖模型
public class ViewModel
{
private readonly List<IceCreamFlavor> _flavors;
[Display(Name = "Favorite Flavor")]
public int SelectedFlavorId { get; set; }
public IEnumerable<SelectListItem> FlavorItems
{
get { return new SelectList(_flavors, "Id", "Name");}
}
}
風景
@Html.LabelFor(m=>m.SelectedFlavorId)
@Html.DropDownListFor(m => m.SelectedFlavorId, Model.FlavorItems)
@Html.ValidationMessageFor(m=>m.SelectedFlavorId)
<input type="submit" value="Submit" />
這種方法很好。
現在我想在同一視圖上顯示Model的屬性。 舉個例子,假設我們有以下屬性。
public class IceCreamFlavor
{
public int Id { get; set; }
public string Name { get; set; }
public float Price { get; set; }
}
現在在Dropdown下面我需要顯示價格
價格:15.99
我怎樣才能做到這一點?
要在提交后從模型中渲染屬性,您可以闖入HTML以顯示它:
@if (Model.Price != 0.0F)
{
<b>Price @Model.Price.ToString("0.00") </b>
}
為此,請在ViewModel上添加一個集合:
public class ViewModel
{
private readonly System.Collections.Generic.List<IceCreamFlavor> _flavors;
public ViewModel()
{
// Construct Flavors
}
public List<IceCreamFlavor> AllFlavors
{
get
{
return _flavors;
}
}
[Display(Name = "Favorite Flavor")]
public int SelectedFlavorId { get; set; }
public System.Web.Mvc.SelectList FlavorItems
{
get { return new System.Web.Mvc.SelectList(_flavors, "Id", "Name");}
}
}
然后在視圖上:
@if (Model.AllFlavors.Any(f => f.Id == Model.SelectedFlavorId))
{
<b>Price @Model.AllFlavors.First(f => f.Id == Model.SelectedFlavorId).Price.ToString("0.00") </b>
}
當然,您可以將選定的Flavor
作為ViewModel
上的屬性公開(類似的顯示原理適用)。 但是,將所有Flavors作為屬性公開的優點是,您可以輕松地將其存儲在頁面上的JavaScript中並查詢,而不是依賴於提交按鈕。
然后,您可以使用JavaScript / JQuery滾動自己的下拉onchange事件,以從該頁面上存儲的對象中讀取。 (或者使用AJAX調用另一個動作來根據需要返回值..)
不暴露所有口味的解決方案是:
ViewModel
屬性:
public IceCreamFlavor SelectedFlavor
{
get
{
return _flavors.FirstOrDefault(f => f.Id == this.SelectedFlavorId);
}
}
在視圖上顯示:
@if (Model.SelectedFlavor != null)
{
<b>Price @Model.SelectedFlavor.Price.ToString("0.00") </b>
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.