2012-01-29 32 views
2

我有2類模型asp.net MVC 3,Html.EditorFor在不同型號

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)  

或者我可以使用不同的局部視圖和reander他們。但他們並不是我最喜歡的解決方案。

難道沒有其他辦法嗎?例如:

<p>  
    User Name: 
    @Html.TextBoxFor<User>(u=> u.UserName) 
</p> 
<p>  
    Product Name: 
    @Html.TextBoxFor<Product>(p=> p.ProductName) 
</p> 

回答

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) 

(我不知道爲什麼你喜歡的第一個版本,它甚至一個字符長...... =)

+0

在第二個版本中添加新的類到模型:BigModel。如果我想使用它,我必須添加幾十個類到模型。 – Morteza 2012-01-29 08:35:38

+0

@MortezaTavakoli。你必須在模型中擁有這兩個類,你認爲HTML幫助器從哪裏獲取值? – gdoron 2012-01-29 08:37:39

+0

這是我的網頁的一部分。我通過ajax獲得價值。我需要html助手,如Html.LabelFor (u => u.UserName)。 – Morteza 2012-01-29 08:51:07

0

您如何確切地得到對用戶和產品的引用?泛型只暴露對象的類型,而不暴露對象的實例。即便如此,也不存在通用版本。

我最近看到過幾個這樣的問題。引用完整類型有什麼大不了的?爲什麼人們有這個問題?

如果你是通過你的數據視圖ViewBag,那麼你可以簡單地這樣做:

@Html.TextBoxFor(m => ViewBag.Value) 

但是這是相當愚蠢的,因爲一)你失去了你的模型綁定和b)你是不是越來越強類型,所以你不妨使用非強類型。

@Html.TextBox("Value", ViewBag.Value); 
+0

我通過ViewBag或Ajax獲取數據。我需要html助手,如:Html.LabelFor (u => u.UserName) – Morteza 2012-01-29 08:53:15

+1

你沒有任何意義。不,你不需要像這樣的Html幫手。首先,它不存在。其次,它不能工作。它不可能以這種方式工作,通用方法無法按照您的需要運行。 – 2012-01-29 09:49:32

0

對於C#6,您可能會考慮不使用@Html幫助程序,而只是將輸入內容寫爲純HTML。

例如:

<input type="text" name="@($"{nameof(BigModel.User)}.{nameof(User.UserName)})" /> 

此當你不使用相同的模型得到的回傳也很方便。