我在Model
中有2个类public class User
{
public int UserID { get; set; }
public string UserName { get; set; }
}
public class Product
{
public int ProductID { get; set; }
public string ProductName { get; set; }
}
我有一个视图,使用类和我需要使用html.TextBoxFor。 我可以创建BigModel:
public class BigModel
{
public User user;
public Product product;
}
所以在视图中:
@model BigModel
@Html.TextBoxFor(m=> m.user.UserName)
@Html.TextBoxFor(m=> m.product.ProductName)
或者我可以使用不同的局部视图并重新调整它们。但它们不是我最喜欢的解决方案。
还有另一种方式吗?如:
<p>
User Name:
@Html.TextBoxFor<User>(u=> u.UserName)
</p>
<p>
Product Name:
@Html.TextBoxFor<Product>(p=> p.ProductName)
</p>
答案 0 :(得分:2)
查看TextBoxFor
方法签名:
public static MvcHtmlString TextBoxFor<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression
)
这是不可能的。写:
@Html.TextBoxFor<Product>(p=> p.ProductName)
所以你对此感到“困惑”:
@Html.TextBoxFor(m=> m.product.ProductName)
(我不知道为什么你更喜欢第一个版本,甚至一个字符更长...... =))
答案 1 :(得分:0)
您认为您将如何获得对用户和产品的引用?泛型只显示对象的TYPE,而不是对象的实例。即便如此,也不存在那些通用版本。
我最近看到过这样的几个问题。引用完整类型有什么大不了的?为什么人们有这个问题?
如果您要传递数据视图ViewBag,那么您只需执行以下操作:
@Html.TextBoxFor(m => ViewBag.Value)
然而,这是相当愚蠢的,因为a)你失去了你的模型绑定和b)你没有获得强大的打字,所以你也可以只使用非强类型。
@Html.TextBox("Value", ViewBag.Value);
答案 2 :(得分:0)
使用C#6,您可能会考虑不使用@Html
帮助程序,而只是将输入写为普通html。
例如:
<input type="text" name="@($"{nameof(BigModel.User)}.{nameof(User.UserName)})" />
当你没有使用相同的模型作为回发时,这也很方便。