我正在尝试构建一个允许用户创建新违规的网站。每个违规都有自己的输入区域。例如,如果用户想要创建新的斜坡宽度违规,他/她应该提供宽度或用于斜坡应提供坡度违规斜率作为输入。
考虑到这些要求,我决定在我的视图中有一个动态属性。
根据违规类型,我的动态对象属性可以是布尔值,整数或双精度。
这是我的类,包括动态属性。为简洁起见,删除了其他属性。
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)
{
}
当页面加载时,它会渲染相关的编辑器模板。问题是当表单被回发时,动态值将作为字符串数组出现,如下所示。
我知道我需要像模型绑定器这样的东西但尚未找到解决方案。我从前面的答案中采用这种方法here
所以问题是;
1-如何使这种方法适用于回发?
2-有没有其他推荐或简单的方法来完成我的任务?
由于