2012-03-14 72 views
0

我目前使用此tutorialAsp.Net MVC强类型集合。 EditorFor不附加生成的前缀

(我相信我的问题是由什么我已经看到在互联网上与强类型集合......,但我可能是错的)

请多多包涵。 :)

我一直有这个问题,我问另一个question,答案似乎很好,但经过修改代码多一点我意识到问题是,使用我的自定义字段部分视图,例如,不会为其添加前缀,例如,使用TextBoxFor html助手的字段。例如。当我点击添加一个新项目时,它会添加一个新项目,但是与之前添加的项目具有相同的ID,那么我的Javascript会失败,因为有两个项目具有相同的ID。

一些代码,试图澄清这一问题

管窥

@model Portal.ViewModels.Micros 
@using Portal.Helpers 
<div class="editorRow" style="padding-left:5px"> 
    @using (Html.BeginCollectionItem("micros")) 
    { 
     @Html.EditorFor(model => model.Lab_T_ID) 
     @Html.EditorFor(model => model.Lab_SD_ID)   
     @Html.TextBoxFor(model => model.Result) 
     <input type="button" class="deleteRow" title="Delete" value="Delete" /> 
    } 
</div> 

的TextBoxFor(结果)被呈现为

<input id="micros_5e14bae5-df1b-4c42-9e96-573a8e52f8b2__Result" name="micros[5e14bae5-df1b-4c42-9e96-573a8e52f8b2].Result" type="text" value=""> 

编辑为得到呈现为

<select id="Lab_SD_ID" multiple="multiple" style="width: 300px; display: none; " > 
     <option value="5" selected="selected">Taken at Packing 1</option> 
     <option value="6">Taken at Packing 2</option> 
     <option value="7">Taken at Packing 3</option> 
</select> 

<button type="button" class="ui-multiselect ui-widget ui-state-default ui-corner-all" aria-haspopup="true" tabindex="0" style="width: 300px; "> 
<span class="ui-icon ui-icon-triangle-2-n-s"></span><span>Taken at Packing (Winc 4/5-25d)</span></button> 

如果需要的话,我可以包含更多的代码,还有一个辅助类(BeginCollectionItem),我也使用它,它位于教程的演示项目中。

我基本上需要找出“micros [5e14bae5-df1b-4c42-9e96-573a8e52f8b2]”。被追加到输入框,据我所知,但一直难住到目前为止:/

回答

2

该原因适用于TextBoxFor而不是您的自定义EditorFor是因为TextBoxFor助手尊重模板导航上下文,而在您的编辑器模板只需对一个甚至没有名称的<select>元素进行硬编码。我建议你产生输入字段时使用HTML助手:

所以更换您的硬编码与自定义模板中进行选择:

@model int? 
@{ 
    var values = ViewData.ModelMetadata.AdditionalValues; 
} 

<span>  
    @Html.DropDownList(
     "", 
     Enumerable.Empty<SelectListItem>(), 
     new { 
      multiple = "multiple", 
      style = "width:" + values["comboboxWidth"] + "px", 
      data_url = Url.Action((string)values["action"], (string)values["controller"]), 
      data_noneselectedtext = values["noneSelectedText"], 
      data_value = values["id"], 
      data_text = values["description"] 
     } 
    ) 
</span> 
+0

谢谢你..不过这事变得荒唐了,感觉就像我一直接受了一整天的训练......我可以给你买一杯啤酒什么的? – 2012-03-14 13:31:46