我有一個類叫做Entity
如何創建自定義的Html.ControlFor?
public class Entity
{
public string Name { get; set; }
public Location Place { get; set; }
}
,並呼籲Location
public class Location
{
public string Country { get; set; }
public string State { get; set; }
public string City { get; set; }
}
一個Entity
包含Location
一個類,所以我要生成3個下拉菜單爲Location
。
- 國家
- 國家
- 市
我可以做手工像
@Html.DropDownListFor(o => o.Country, new [] { new SelectListItem() { Text = "United States", Value="US" } })
<br />
@Html.DropDownListFor(o => o.State, new [] { new SelectListItem() { Text = "Some State", Value="SS" } })
<br />
@Html.DropDownListFor(o => o.City, new[] { new SelectListItem() { Text = "Some city", Value = "City" } })
但我有我的網站的幾個地方,將需要完全一樣的3個下拉菜單,如Restaurant
,Hotel
和其他類也有Location
。我試圖做的是開始一個新形式的局部視圖,但我得到一個異常:
傳遞到字典的模型項的類型爲「TestMVC3Razor.Controllers.Entity」,但這個字典需要類型 'TestMVC3Razor.Controllers.Location' 的模型項目,此代碼:
@model TestMVC3Razor.Controllers.Entity
@using (Html.BeginForm())
{
@Html.Partial("LocationSelector", Model.Place)
<br />
<input type="submit" value="Submit" />
}
和部分觀點是
@model TestMVC3Razor.Controllers.Location
@using (Html.BeginForm())
{
@Html.DropDownListFor(o => o.Country, new [] { new SelectListItem() { Text = "United States", Value="US" } })
<br />
@Html.DropDownListFor(o => o.State, new [] { new SelectListItem() { Text = "Some State", Value="SS" } })
<br />
@Html.DropDownListFor(o => o.City, new[] { new SelectListItem() { Text = "Some city", Value = "City" } })
}
這顯然不應該工作,但我想要做類似的東西,像這樣的助手將是完美的
@Html.LocationSelectFor(o => o.Location)
但是我怎麼做到這一點?我需要生成3 dropdowns
,當我發佈到某個操作時,我需要使用bidden值來獲取對象。
public ActionResult(Location loc)
{
var x = String.Format("{0}, {1} - {2}", loc.City, loc.Country, loc.State);
}
我怎樣才能讓這個助手創建3下拉菜單和綁定值當我發佈?
我沒有時間去*如何*現在就這樣做,但它可能是值得創建一個自定義編輯器接受一個複雜的「位置」值包含三個字符串,然後使用UIHint屬性,你仍然可以使用「EditorFor(...)」,但編輯器將使用UIHint的編輯器而不是默認編輯器。或者,您可以將編輯器視圖命名爲複雜的位置模型。 – 2011-05-05 23:47:29