아약스를 사용하여 동적으로 필드 목록에 항목을 추가하고 있습니다.아약스를 사용하여 양식에 필드 추가하기
문제는 이러한 항목에 올바른 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-list">
@Html.EditorFor(model => model.Fields)
</div>
<p>
<span class="add-field">Add Field</span>
</p>
:
<div class="field-sections">
<div id="sections">
@Html.EditorFor(model => model.Sections)
</div>
<p>
<span class="add-section">Add Section</span>
</p>
</div>
섹션이 같은 EditorTemplate있다 Field에는 다음과 같은 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
입니다.
이것은 분명히 잘못되었습니다. 그것은 올바른 ID/이름을 제공하는 자바 스크립트를 사용하여 페이지에 추가하기 전에 내 HTML을 수정할 수있는 것 같지만 정말 끔찍한 솔루션입니다. 올바른 이름과 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로 Field를 추가하고 있습니다. 그러나 ID는 Value이고 이름은 Value *입니다. * -이 코드는 어디에 있습니까? –
고마워요, 고마워요. – Jon