1

如何绑定到具有input[type='text']类型属性的字段Subsidiary 当用户注册一方时,其中一个字段是该方的子公司

我没有放置 DropDown、Select 或 Radio,而是放置了一个input[type='text']字段,当用户开始输入子公司的名称时,jQueryUI 的自动完成功能会显示已过滤的子公司列表

代码

为了完成这些任务,我有:

视图模型

public class PartyViewModel
{       
    [UIHint("SubsidiarySelect")]
    public Subsidiary Subsidiary { get; set; }
}

HTML

由 EditorTemplates 生成的 HTMLSubsidiarySelect

<input id="Subsidiary_Title" name="Subsidiary.Title" type="text" value="">
<input id="Subsidiary" name="Subsidiary" type="hidden" value="00000000-0000-0000-0000-000000000000">

#Subsidiary_Title> 用于显示选中的子公司
#Subsidiary> 保存选中的子公司代码Guid

控制器

我的控制没什么特别的。我希望SubsidiaryPartyViewModel班上的财产能被填满。

[HttpPost]
public ActionResult Nova(PartyViewModel model)
{
    if (ModelState.IsValid)
    {
        //.....
    }
}

问题

我想创建一个SubsidiaryBinder: IModelBinder,以便在发布帖子时,我会Subsidiary用数据库值填充属性(就像 ID 一样)

  1. 如果这是解决方案,那么如何创建一个仅在 PartyViewModel 类中运行的活页夹
  2. 发帖时如何自动从数据库中检索Subsidiary属性类的值PartyViewModel

您可以做的最好的事情是查看哪些数据点,看看它是否有迹象表明它是您想要的,尽管 a) 它不会接近保证并且 b) 可能很危险,因为您不知道不知道数据实际指向的东西有多大。我想它并不比仅仅铸造和使用它更危险,但是(正如已经建议的那样)重新设计会更好。

4

1 回答 1

0

您可以PartyViewModel在 global.asax 中为 Application_Start设置 Binder

样本

你的活页夹

public class PartyViewModelBinder : DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        // ... do something,
        // for example, retieve values from database 
        return base.BindModel(controllerContext, bindingContext);
    }
}

在 global.asax 中注册

ModelBinders.Binders.Add(typeof(PartyViewModel), new PartyViewModelBinder());
于 2012-02-01T16:44:31.117 回答