我正在使用ajax動態添加項目到字段列表。使用ajax將字段添加到表單
問題是這些項目沒有正確的ID或名稱,因此它們無法正確映射,並且在提交表單時未反映到模型中。
這是我的代碼的結構:
public class Main
{
public IEnumerable<FieldSection> Sections { get; set; }
}
public class FieldSection
{
public virtual IList<Field> Fields { get; set; }
}
public class Field
{
[Required]
public string Value { get; set; }
}
這是我如何渲染主營:
<div class="field-sections">
<div id="sections">
@Html.EditorFor(model => model.Sections)
</div>
<p>
<span class="add-section">Add Section</span>
</p>
</div>
的一節,像這樣的EditorTemplate:
<div class="field-list">
@Html.EditorFor(model => model.Fields)
</div>
<p>
<span class="add-field">Add Field</span>
</p>
字段有這樣的EditorTemplate:
<div class="editor-field">
@Html.LabelFor(model => model.Value)
@Html.EditorFor(model => model.Value)
@Html.ValidationMessageFor(model => model.Value)
</div>
如果我有一個部分和兩個字段,Value
字段的最後一個文本框的ID爲Sections_0__Fields_1__Value
,名稱爲Sections[0].Fields[1].Value
。
我通過渲染我的EditorTemplate Field.cshtml
將ajax添加到Field
,將其返回到頁面並將其添加到該部分。但是ID將爲Value
,名稱將爲Value
。
這顯然是不正確的。看起來我可以修改我的HTML,然後使用javascript將它添加到頁面中,以便爲其提供正確的ID /名稱,但這是一個非常糟糕的解決方案。如何讓我的視圖使用正確的名稱和ID進行呈現?或者我以錯誤的方式接近這個?
編輯
渲染域代碼:
[HttpGet]
public string Field()
{
return MvcRenderUtility.RenderToString(this, "EditorTemplates/TemplateField", new TemplateField());
}
而且渲染實用程序:
public static class MvcRenderUtility
{
public static string RenderToString(Controller controller, string viewName, object model)
{
if (string.IsNullOrEmpty(viewName))
viewName = controller.ControllerContext.RouteData.GetRequiredString("action");
controller.ViewData.Model = model;
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
}
*我通過渲染我的EditorTemplate Field.cshtml來添加一個字段ajax,將其返回到頁面並將其添加到該部分。然而,ID將是Value並且名稱將是Value。* - 代碼在哪裏? –
以上爲你添加了它,謝謝。 – Jon