[英].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.