【问题标题】:ASP.NET MVC Html.TextBoxFor dynamic valueASP.NET MVC Html.TextBoxFor动态值
【发布时间】:2011-04-28 09:04:06
【问题描述】:
我有一个场景,在某个视图上我可以有 2 个相同类型的不同对象[Customer]。第一个称为Customer,另一个称为CustomerApprove。后者包含要批准的客户数据的更改。
如果CustomerApprove 对象已填充,我希望文本框包含该值。否则我想使用普通的Customer 对象值。
我想到了两种方法来实现这一点。
-
使用 @value 初始化器和内联 IF 语句
Html.TextBoxFor(m => Customer.City, new { @Value = somecondition ? CustomerApprove.City : Customer.City })
-
调用模型上的方法以确定要使用的对象。
Html.TextBoxFor(m => Customer.City, new { @Value = Model.SomeMethodToGetTheValue() })
哪种方法更好用,或者有其他建议吗?
【问题讨论】:
标签:
asp.net-mvc
html-helper
html.textbox
【解决方案1】:
我建议您使用视图模型并在控制器中填充相应的属性,以便在视图中您可以简单地:
@Html.TextBoxFor(x => x.CustomerCity)
在基于模型值的控制器操作中,您将分别填充 CustomerCity 视图模型属性。
【解决方案2】:
如何为 Customer 和 CustomerApproved 创建视图模型。 ViewModel 将公开一些公共属性(例如 City),而您只需从控制器返回 ViewModel。我正在考虑类似的事情:
public class CustomerViewModel
{
public CustomerViewModel(Customer customer)
{
this.City = customer.City;
}
public CustomerViewModel(CustomerApprove customerApprove)
{
this.City = customerApprove.City;
}
public object City { get; set; }
}