使用动态编辑器模板

时间:2015-12-29 18:33:57

标签: asp.net-mvc templates razor dynamic

我正在尝试构建一个允许用户创建新违规的网站。每个违规都有自己的输入区域。例如,如果用户想要创建新的斜坡宽度违规,他/她应该提供宽度或用于斜坡应提供坡度违规斜率作为输入。

考虑到这些要求,我决定在我的视图中有一个动态属性。

根据违规类型,我的动态对象属性可以是布尔值,整数或双精度。

这是我的类,包括动态属性。为简洁起见,删除了其他属性。

public class CreateViolationViewModel
{

public string DynamicName { get; set; }

public object DynamicValue { get; set; }

}

主视图

 @Html.LabelFor(model => model.DynamicName, @Model.DynamicName, new { @class            = "control-label col-md-2" })
 <div class="col-md-10">
@Html.EditorFor(x => x.DynamicValue, "violationDynamics_" +  Model.DynamicValue.GetType().Name)
 </div>
@Html.HiddenFor(model => model.DynamicName, new {@value=Model.DynamicName })

EditorTemplate For Integer(violationDynamics_Int32.cshtml)

@{
    Layout = null;
}
@model int

@Html.TextBoxFor(x => x, new { @class = "form-control", @type = "number" })
@Html.Hidden("ModelType", Model.GetType())

EditorTemplate For Double(violationDynamics_Double.cshtml)

@{
    Layout = null;
}
@model double
@Html.TextBoxFor(x => x, new { @class = "form-control", @type = "number" })

@Html.Hidden("ModelType", Model.GetType())

控制器

   [HttpPost]
        public ActionResult Create(CreateViolationViewModel createViolationViewModel)
        {

        }

当页面加载时,它会渲染相关的编辑器模板。问题是当表单被回发时,动态值将作为字符串数组出现,如下所示。

Snapshot

我知道我需要像模型绑定器这样的东西但尚未找到解决方案。我从前面的答案中采用这种方法here

所以问题是;

1-如何使这种方法适用于回发?

2-有没有其他推荐或简单的方法来完成我的任务?

由于

0 个答案:

没有答案