0
這是我的剃鬚刀視圖。主要的一點是當我的下拉值發生變化時,更新question-editor
div。正如你所看到的,我正在調用EditorFor
。如何使用Ajax更新這個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>
}
這裏是局部視圖,只是包含一個EditorModelFor來選擇它應該使用哪個視圖模板。
_QuestionEditorBox(PartialView)
@model Contoso.Core.Base.QuestionTemplate
@Html.EditorForModel(Contoso.Core.QuestionRepositoryManager.GetQuestionTemplateView(Model))
public abstract class Question
{
public int Id {get;set;}
public string QuestionText { get; set; }
}
public OpenQuestion : Question { ... }
public MultipleChoiceQuestion : Question { ... }
public class CreateQuestionViewModel
{
public int QuestionSetId { get; set; }
public QuestionTemplate Template { get; set; }
}
但我這樣做的時候,因爲我與同型號做EditorFor兩次不顯示任何內容。我試圖用PartialView
更改第一個EditorFor,但這不會起作用,因爲我需要模型綁定器捕獲我的模型。
EDIT(AJAX方法):
$("#question-type-dropdown").change(function() {
$.get("/Question/UpdateQuestionEditorBox", { questionType: $(this).val() },
function (data) {
$("#question-editor").html(data);
});
});
準確地說,我沒有顯示ajax方法(我認爲應該不相關的目的)..我沒有關於TemplateInfo的想法,它聽起來不錯!有了這個就像使用EditorFor對嗎? – 2013-03-10 16:42:40
是的,通過設置'HtmlFieldPrefix',您可以控制模板中的導航上下文,因此部分可以充當編輯器模板。 – 2013-03-10 17:02:28
只是爲了好奇,你提到這是一個可能性,還有其他嗎? – 2013-03-10 17:11:34