Asp.net mvc 4 isn的编辑器';t在MVC4中使用EditorTemplate
我一直在拼命想让Editor按我所说的那样工作,但我一辈子都不能让我的版本工作 我有两个视图模型: 访谈模式Asp.net mvc 4 isn的编辑器';t在MVC4中使用EditorTemplate,asp.net-mvc-4,editorfor,Asp.net Mvc 4,Editorfor,我一直在拼命想让Editor按我所说的那样工作,但我一辈子都不能让我的版本工作 我有两个视图模型: 访谈模式 public class InterviewViewModel { ... public List<QuestionViewModel> Questions { get; set; } } 我尝试在两个地方创建EditorTemplates /视图/访谈/编辑模板/问题视图模型.cshtml 及 /Views/Shared/EditorTemplates/Q
public class InterviewViewModel
{
...
public List<QuestionViewModel> Questions { get; set; }
}
我尝试在两个地方创建EditorTemplates
/视图/访谈/编辑模板/问题视图模型.cshtml
及
/Views/Shared/EditorTemplates/QuestionViewModel.cshtml
两人似乎都没有做任何事
控制器代码:
编辑模板代码:
@model ResidentRank.Models.Interview.QuestionViewModel
@DisplayFor(m=>m.QuestionName)
@Html.DropDownListFor(m=>m.SelectedQuestionOption,Model.OptionSelector)
我脑海中萦绕的问题是“为什么这不起作用?!”在HomeController中
[HttpGet]
public ActionResult Display(int id = 0)
{
var questionViewModel = new InterviewViewModel {
Questions =
new List<QuestionViewModel>()
{
//Hard coded values to represent data coming from db i.e db.QuestionModels.ToList();
new QuestionViewModel() {QuestionId = 1, QuestionName = "A"},
new QuestionViewModel() {QuestionId = 2, QuestionName = "B"}
}
};
return View(questionViewModel);
}
为了保持视图的简单性
这显示
你所说的“为什么这不起作用?!”是什么意思?你得到的实际错误是什么?我没有得到错误;这是我在没有显示任何内容时添加的视图中的实际文本。这个想法是,如果我在页面上有一些其他的逻辑导致它下面的div不显示,那么这个文本就会显示出来。事实上,它对我很有用。我很快就会发布我的解决方案。这应该行得通,正如拉杰所展示的,这对他来说是行得通的。这意味着您在代码中有一些您没有向我们展示的东西,可能会干扰事情。我建议你开始简化你的代码,直到你可以得到一个完整的样本,你可以发布仍然有问题(不是一个样本,你编辑出来的东西,像你在这里做的)。机会是,在简化的同时,你会发现它突然起作用。然后您需要回溯并找出删除的内容。在编辑器模板中有QuestionViewModel,但在控制器中有questionModels=db.questionModels.ToList()。。。viewModel.Questions=questionViewModels;这是一份清单。所以它不会使用模板,我可以得到一个过于简化的版本。仍在努力使其中包含实际数据的设备正常运行。感谢您的帮助。问题是我在Html.BeginForm元素中声明了Html.EditorFor,但没有立即使用“@”。我在想它当时处于“代码模式”的开头括号中…显然不是。添加@并将其包装到字段集中修复了该问题。
public ActionResult MyClass(int id = 0)
{
using (RRContext db = new RRContext())
{
...
List<QuestionModel> questionModels = new List<QuestionModel>();
questionModels = db.QuestionModels.ToList();
...
viewModel.Questions = questionViewModels;
return View(viewModel);
}
}
@model ResidentRank.Models.Interview.InterviewViewModel
... (html.beginform is here)
Html.EditorFor(model => model.Questions);
@model ResidentRank.Models.Interview.QuestionViewModel
<div style="clear:both; margin:10px 0px;">
<label>@Html.DisplayFor(m => m.QuestionName)</label>
@Html.DropDownListFor(m => m.SelectedQuestionOption, Model.OptionSelector)
</div>
[HttpGet]
public ActionResult Display(int id = 0)
{
var questionViewModel = new InterviewViewModel {
Questions =
new List<QuestionViewModel>()
{
//Hard coded values to represent data coming from db i.e db.QuestionModels.ToList();
new QuestionViewModel() {QuestionId = 1, QuestionName = "A"},
new QuestionViewModel() {QuestionId = 2, QuestionName = "B"}
}
};
return View(questionViewModel);
}
public class InterviewViewModel {
public List<QuestionViewModel> Questions { get; set; }
}
public class QuestionViewModel {
public int QuestionId { get; set; }
public string QuestionName { get; set; }
}
@model MvcApplication1.Models.Interview.InterviewViewModel
@using (Html.BeginForm())
{
<fieldset>
@Html.EditorFor(x => x.Questions)
<input type="submit" value="Save" />
</fieldset>
}
@model MvcApplication1.Models.Questions.QuestionViewModel
<div style="clear:both; margin:10px 0px;">
<label>@Html.DisplayFor(m => m.QuestionName)</label>
</div>
@Html.DropDownListFor(m => m.SelectedQuestionOption, Model.OptionSelector)