2013-07-19 32 views
0

在我的模型中我有IEnumerable,並且由於這個原因,我無法在視圖中使用for循環。如果我使用foreach,生成的Html沒有索引,這就是我需要的。我如何解決這個問題。 我試圖使用相同的視圖模型來創建和編輯,我在編輯部分有問題。由於模型中的IEnumerable,無法使用索引視圖?

public class CreateModule 
    { 
     //Empty form to handle form serialization 
     public CreateModule() 
     { 
     } 

     public long Id { get; set; } 
     [Required] 
     public string ModuleId { get; set; } 

     [DataType(DataType.DateTime)] 
     public DateTime DateEntered { get; set; } 

     public string KindName { get; set; } 
     public string TypeName { get; set; } 

     public string SelectedModuleTypeName { get; set; } 

     public IEnumerable<SelectListItem> TypeNames { get; set; } 

     public IEnumerable<Property> Properties { get; set; } 
    } 
    public class Property 
    { 
     public string Name { get; set; } 
     public string Value { get; set; } 
    } 

這是我的看法,我也同時用於和foreach,但我已經爲評論,因爲我不能產生以下兩個名字在它目前

@* 
    @for (int i = 0; i < Model.Properties.Count(); i++) 
    { 
    <label class="label">@Model.Properties[i].Value</label> 
    <div class="input-block-level">@Html.TextBoxFor(model => Model.Properties[i].Value, new { @value = Model.Properties[i].Value })</div> 
    } 
    *@ 

    @foreach (var properties in Model.Properties) 
    { 
     <div class="label">@properties.Name</div> 
     <div class="input-block-level">@Html.TextBoxFor(model => properties.Value, new { @value = properties.Value })</div> 
     <br/> 
    } 

目前Html.Textbox使用該索引沒有索引 properties.value 因爲這個在post中提交的值是Null。如果我使用for循環,那麼我認爲我的properties.value將更改爲屬性[0] .value屬性[1] .value ???我不確定,但那是我想要實現的。

如果我改變從

public IEnumerable<Property> Properties { get; set; } 

我的模型

public List<Property> Properties { get; set; } 

那麼它reutrns的IQueryable爲值的屬性在倉庫我下面的方法是行不通的,而從IQueryable的鑄造到列表將不可能。

public CreateModule GetModuleDetails(long id) 
{ 
    var module = (_dbSis.Modules.Where(t => t.Id == id).Select(m => new CreateModule 
     { 
     Id = id, 
     ModuleId = m.ModuleId, 
     TypeName = m.ModuleType.TypeName, 
     KindName = m.ModuleType.ModuleKind.KindName, 
     Properties = m.PropertyConfiguration.PropertyInstances.Select(
        x => new Property { Name = x.Property.Name, Value = x.Value }) 
     })); 

     return (module.FirstOrDefault()); 
    } 
+0

你在哪裏甚至需要索引?目前,循環的差異是無關緊要的。 –

+0

當前如果我有兩個屬性名稱和兩個屬性值,我的foreach循環爲顯示屬性值的文本框生成名稱'properties.value'。我希望它不被顯示爲'properties.value',而是'properties [0] .value'和'properties [1] .value',這不會通過使用for循環來實現嗎? – Cybercop

+0

如果我正確地解釋你,不,一點也不。 –

回答

0

創建一個局部視圖像下面,將其命名Property.cshtml,並把它下查看/共享/ EditorTemplates。

@model MyApp.Models.Property 

<div class="label">@Model.Name</div> 
<div class="input-block-level">@Html.TextBoxFor(model => Model.Value)</div> 
<br/> 

接着,以該更換foreach循環在你的視野:

@EditorFor(model => model.Properties) 
相關問題