ASP.NET MVC Html.TextBoxFor动态值

时间:2011-04-28 09:04:07

标签: asp.net-mvc html-helper html.textbox

我有一个场景,在某个视图中,我可以拥有2个相同类型[Customer]的不同对象。第一个称为Customer,另一个称为CustomerApprove。后者包含要批准的客户数据的更改。

如果CustomerApprove对象已填满,我希望文本框包含该值。否则我想使用正常的Customer对象值。

我想到了两种方法来实现这一目标。

  1. 使用@value初始值设定项和内联IF语句

    Html.TextBoxFor(m => Customer.City, new { @Value = somecondition ? CustomerApprove.City : Customer.City })

  2. 调用Model上的方法以确定要使用的对象。

    Html.TextBoxFor(m => Customer.City, new { @Value = Model.SomeMethodToGetTheValue() })

  3. 哪种方法更好用,还是有其他建议?

2 个答案:

答案 0 :(得分:4)

我建议您使用视图模型并在控制器中填充相应的属性,以便在视图中可以简单地:

@Html.TextBoxFor(x => x.CustomerCity)

在基于模型值的控制器操作中,您将分别填充CustomerCity视图模型属性。

答案 1 :(得分:1)

如何为Customer和CustomerApproved创建View模型。 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; }
}