0
我使用通用Razor視圖來允許編輯任何實體框架對象。下面是它的一個砍下版本:@ Html.Editor在使用反射屬性時顯示奇怪的結果
@model Object
@using (Html.BeginForm())
{
@foreach (var property in Model.VisibleProperties())
{
@Html.Label(property.Name.ToSeparatedWords())
@Html.Editor(property.Name, new { @class = "input-xlarge" })
}
}
而且VisibleProperties()函數是這樣的:
public static PropertyInfo[] VisibleProperties(this Object model)
{
return model.GetType().GetProperties().Where(info =>
(info.PropertyType.IsPrimitive || info.PropertyType.Name == "String") &&
info.Name != model.IdentifierPropertyName()).OrderedByDisplayAttr().ToArray();
}
(我是從重用代碼)
我的一個樣本控制器如下:
public ActionResult Edit(int id = 0)
{
TaskTemplate tasktemplate = db.TaskTemplates.Single(t => t.TaskTemplateID == id);
return View(tasktemplate);
}
現在問題: 除了有一個與'父'表相關的ID屬性(如UserID)之外,它一切正常。對於這些字段,@ Html.Editor的輸出很簡單: FalseFalseTrueFalse。
True似乎對應於有問題的用戶 - 在本例中是數據庫中的第4個用戶。
爲什麼它不輸出一個不錯的帶有數字4(或任何UserID)的文本框?
我希望我已經解釋清楚。
嗯,我不知道這就是我要找的。我仍然不明白爲什麼它不會將FirmID顯示爲可編輯的整數值?畢竟,這是財產是不是?奇怪的是,我也有一個索引控制器和視圖,它使用IEnumerable來顯示所有的屬性。在這種情況下,它工作正常並且完美地呈現整數值。 – rwalter
正如我在默認情況下的回答所解釋的那樣,'Html.Editor'幫手不會遞歸到複雜的子屬性中。如果您希望發生這種情況,您必須爲對象類型編寫自定義編輯器模板。 –
對不起 - 仍然不明白!數據庫中的FirmID只是一個「int」。也許問題是:如果我只想讓'int'出來,我該如何阻止MVC將它看作一些複雜的值?有什麼我可以使用LINQ或dbcontext來阻止這種情況發生嗎?我知道這是可能的,因爲我的其他代碼使用了「Enumerable」對象列表。在這種情況下,'int'被正確地返回。 – rwalter