Это мой вид бритвы. Главное, когда я изменил значение выпадающего списка, обновите div question-editor
. Как вы можете видеть, я вызываю EditorFor
.Как обновить этот div с помощью Ajax?
@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 два раза с одной и той же модели. Я попытался изменить первый EditorFor с PartialView
, но это не сработает, потому что мне нужно, чтобы привязка модели ловила мою модель.
EDIT (AJAX метод):
$("#question-type-dropdown").change(function() {
$.get("/Question/UpdateQuestionEditorBox", { questionType: $(this).val() },
function (data) {
$("#question-editor").html(data);
});
});
Точно, я не показываю метод ajax (я предполагал, что это должно быть неуместно для этой цели). У меня не было представления о TemplateInfo, это звучит здорово !! С этим, как с помощью EditorFor право? –
Да, установка 'HtmlFieldPrefix' позволяет вам управлять навигационным контекстом в шаблоне, и, таким образом, частичное может действовать как шаблон редактора. –
Просто для любопытства вы упомянули, что это возможность, есть ли другие? –