如何从控制器调用EditorFor

时间:2013-07-31 12:55:22

标签: c# asp.net-mvc

我有位置列表

public class Location
{
    public string LocationName { get; set; }
    public string Address { get; set; }
}

我为这个类创建了编辑器模板

<div>
   <span>@Html.TextBoxFor(a => a.LocationName)</span>
   <span style="color: red;">@Html.TextBoxFor(a => a.Address )</span>
</div>

问题是,位置使用ajax加载到我的页面,然后我将结果发送回服务器。 但是如何使用特定索引获取此位置?我的意思是,对于第一个位置,它将生成如下:

<input type="text" name="Locations[0].LocationName" />

对于第二个位置,当我按“添加位置”按钮时,它应该从服务器获取此位置(从控制器的操作作为html字符串)但索引1不是0,因为它是下一个位置。

有可能实现吗?或者我做错了什么?

2 个答案:

答案 0 :(得分:3)

像这样的东西

    [HttpGet]
    public virtual ActionResult LocationEditor(int index)
    {
        ViewData.TemplateInfo.HtmlFieldPrefix = string.Format("Locations[{0}]", index);
        return PartialView(@"EditorTemplateExplicitPathAsOnlyViewNameAintGonnaWork.cshtml");
    }

对于位置名称容器

<div class="locations-container" data-item-count="@Model.Count">
    @for (int j = 0; j < Model.Count; j++)
    {
        @Html.EditorFor(model => model[j])
    }
    <a href="#" class="add-location">Add Location</a>
</div>

添加并使用新索引调用LocationNameEditorLocationNameEditor操作时,其他一小部分javascript用于增加数据项计数。

答案 1 :(得分:2)

您可以尝试使用部分视图并创建一个返回AjaxResult的操作方法(我相信这是正确的)。然后,您可以让控制器填充视图模型并将其传递到要在您指定的位置的页面中呈现的局部视图。