我有这个型号:
public class QuestionSimple
{
public string Body { get; set; }
public bool IsSingleChoice { get; set; }
public List<String> Answers { get; set; }
public string Difficutly { get; set; }
public string Explanation { get; set; }
}
我试图在Global.asax.cs
ModelBinders.Binders.Add(typeof(QuestionSimple), new AddQuestionSimpleBinder());
...使用此活页夹
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
// Get the raw attempted value from the value provider
string key = bindingContext.ModelName;
ValueProviderResult val = bindingContext.ValueProvider.GetValue(key);
//val is ALWAYS NULL
return null;
}
但是val也是空的 当我不使用我的活页夹时,这是应该返回(实际上确实返回)答案列表的视图。
@using (Html.BeginForm("AddQuestionSimple", "Topic", FormMethod.Post, new { @id = "mainForm" }))
{
<input type="text" name="questionToBeAdded.Answers[0]" value="ff" />
<input type="text" name="questionToBeAdded.Answers[1]" value="ddds" />
<input type="text" name="questionToBeAdded.Answers[2]" value="ff" />
<input type="text" name="questionToBeAdded.Answers[3]" value="ddds" />
<input type="text" name="questionToBeAdded.Answers[4]" value="ff" />
<input type="text" name="questionToBeAdded.Answers[5]" value="ddds" />
<input value="Add question" type="submit" style="position: static; width: 10em; height: 3em;
font-size: 1em;" />
}
默认的模型绑定器会在我发布时获取我的值,但我的val
始终为null
。
为什么会这样?
(应该提到这是解决this更大问题的尝试。)
编辑1:
这是应该受约束的行动
[HttpPost]
public ActionResult AddQuestionSimple(PMP.WebUI.Models.UserInteractionEntities.UserInput.QuestionSimple questionToBeAdded)
{
return View("AddQuestion");
}
感谢。
答案 0 :(得分:0)
首先,您必须覆盖BindModel,因此您的方法将以:
开头public override object BindModel
接下来,您在bindingContext.ValueProviders
中找不到包含“questionToBeAdded”键的值。调试并查看该集合,bindingContext.ValueProviders [1]有一个FormValueProvider,其中包含模型的所有属性。你这样做的方式,你可能需要手动迭代。另一种方法是覆盖BindProperty方法,只需输入:
protected override void BindProperty
在模型binder类中,您将获得填写的方法签名(假设您继承自DefaultModelBinder)。在这种方法中,您将获得有关每个属性的更多详细信息,并为您完成管道。