Asp.net mvc 如何使用Ajax更新此div?

Asp.net mvc 如何使用Ajax更新此div?,asp.net-mvc,razor,asp.net-mvc-4,Asp.net Mvc,Razor,Asp.net Mvc 4,这是我的观点。主要的一点是,当我更改下拉列表值时,更新问题编辑器div。如您所见,我正在为调用编辑器 @model Contoso.MvcApplication.Models.Question.CreateQuestionViewModel @{ ViewBag.Title = "Create Open Question"; } <h3>Create Question</h3> <select id="question-type-dropdown" s

这是我的观点。主要的一点是,当我更改下拉列表值时,更新
问题编辑器
div。如您所见,我正在为调用
编辑器

@model Contoso.MvcApplication.Models.Question.CreateQuestionViewModel

@{
    ViewBag.Title = "Create Open Question";
}

<h3>Create Question</h3>

<select id="question-type-dropdown" style="margin-bottom: 20px;">
    <option value="MC">Multiple Choice</option>
    <option value="O">Open Question</option>
</select>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)

    <fieldset>
        @Html.HiddenFor(model => model.QuestionSetId)
        <legend>Question Template</legend>

        <div id="question-editor">
            @Html.EditorFor(model => model.Template, "_QuestionEditorBoxPartial")
        </div>

        <p>
            <input type="submit" value="Save" />
        </p>
    </fieldset>
}
但当我这样做时,它没有显示任何内容,因为我用同一个模型做了两次Editor。我试图用
PartialView
更改first Editor for,但这行不通,因为我需要模型绑定器捕获我的模型

编辑(AJAX方法):

$("#question-type-dropdown").change(function () {
    $.get("/Question/UpdateQuestionEditorBox", { questionType: $(this).val() },
        function (data) {
            $("#question-editor").html(data);
        });
});

一种可能性是使用分部(而不是编辑器模板):

请注意,我是如何设置
HtmlFieldPrefix
的,以便将导航上下文保留到分部中,从而在相应的编辑器模板中为输入字段生成适当的名称


此外,您还提到在下拉选择更改时使用AJAX调用更新
问题编辑器
div,但您还没有显示任何AJAX代码来执行此操作。我猜您已经订阅了某个下拉列表的.change事件,并触发了一个AJAX调用。

确切地说,我没有显示AJAX方法(我认为这与此目的无关)。。我不知道TemplateInfo,听起来很棒!!这就像使用EditorFor right?是的,设置
HtmlFieldPrefix
可以控制模板中的导航上下文,因此该部分可以充当编辑器模板。出于好奇,您提到这是一种可能性,还有其他可能性吗?是的,可能还有其他可能性,但这取决于您的项目设计和具体要求。根据你在问题中提供的信息,这是我想到的第一个解决方案。
$("#question-type-dropdown").change(function () {
    $.get("/Question/UpdateQuestionEditorBox", { questionType: $(this).val() },
        function (data) {
            $("#question-editor").html(data);
        });
});
<div id="question-editor">
    @Html.Partial("_QuestionEditorBox.cshtml", Model.Template)
</div>
@model Contoso.Core.Base.QuestionTemplate
@{
    ViewData.TemplateInfo.HtmlFieldPrefix = "Template";
}
@Html.EditorForModel(Contoso.Core.QuestionRepositoryManager.GetQuestionTemplateView(Model))