我想知道是否有一个很好的示例,说明如何使用模型绑定在MVC中编辑ASP.NET配置文件设置。
目前我有:
查看配置文件详细信息有效 - 表单中会显示正确填充的所有字段。
保存表单会产生异常:System.Configuration.SettingsPropertyNotFoundException:找不到设置属性“FullName”。
考虑到这一点是有道理的,因为模型绑定将实例化ProfileCommon类本身而不是抓取其中一个httpcontext。此外,保存可能是多余的,因为我认为配置文件在修改时会自动保存 - 在这种情况下,即使验证失败也是如此。正确?
无论如何,我目前的想法是我可能需要为模型绑定创建一个单独的Profile类,但是当我已经有一个非常相似的类时,它似乎有点多余。
在某个地方有一个很好的例子吗?
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Edit()
{
return View(HttpContext.Profile);
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(ProfileCommon p)
{
if (ModelState.IsValid)
{
p.Save();
return RedirectToAction("Index", "Home");
}
else
{
return View(p);
}
}
答案 0 :(得分:3)
当你说在后期场景中从头开始创建ProfileCommon实例(而不是从HttpContext创建)时,这听起来是正确的 - 这就是DefaultModelBinder的作用:它根据默认构造函数创建一个新类型的实例。
我认为你可以通过创建一个类似这样的自定义IModelBinder来解决这个问题:
public class ProfileBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext,
ModelBindingContext bindingContext)
{
return controllerContext.HttpContext.Profile;
}
}
您可能需要进行一些强制转换才能使其适合您的个人资料类。
要使用此ProfileBinder,您可以将其添加到Edit控件操作中,如下所示:
public ActionResult Edit([ModelBinder(typeof(ProfileBinder))] ProfileCommon p)