我正在使用asp.net MVC 4. 注意我正在使用数组。我一直都知道列表使用em,但这应该是数组。
问题
现在这是一个非常长的列表和许多复选框。为了将其打包到更加用户友好的用户界面,我想要一个包含所有证书的保管箱。还有一个按钮,上面写着“添加强制性证书”以及一个“添加所需证书”的按钮。
我的解决方案(随意批评)
创建部分
将两个字符串属性添加到viewmodel或两个数组中
创建一个下拉列表
创建两个按钮(一个用于强制,第二个用于期望)
创建两个隐藏字段
逻辑部分
在按钮上单击将下拉列表中的证书值添加/附加到
隐藏字段为“强制”或“理想”。
在控制器中将字符串拆分为“,”,并构建选择“强制”/“理想”证书的数组。
这特别丑陋或我应该怎么做?
我有以下观点
@using (Html.BeginForm())
{
for (int i = 0; i <= Model.Certificates.Count - 1; i++)
{
@Html.HiddenFor(x => x.Certificates[i].Value)
@Html.HiddenFor(x => x.Certificates[i].Name)
@Html.CheckBoxFor(x => x.Certificates[i].Checked)
@Html.LabelFor(x => x.Certificates[i].Checked, Model.Certificates[i].Name)
@Html.DropDownListFor(m => m.Certificates[i].SearchIncluded,
new SelectList(new []
{ new { Selected = true, Text = "Not included", Value = "Not included"},
new { Selected = false, Text = "Mandatory", Value = "Mandatory"},
new { Selected = false, Text = "Desirable", Value = "Desirable"},
}, "Value","Text","Selected"));
<br />
}
<Input type = "submit" Name = "SearchButton" value = "Search" />
}
答案 0 :(得分:1)
我想我有一些批评
可能会为循环中的证书显示创建局部视图,因此循环看起来像
@ Html.Parital(“CertificatePartial”,x.Certificates [i])
如果您的表单对于“强制”或“理想”证书是相同的,请在“添加证书”表单底部使用一个“保存”按钮。如果表格相同,则强制或理想条件应为证书的属性。它可以使用表单上的单选按钮包含在内,以便用户可以选择“强制”或“理想”。
我还有另外一种可能的方式来衡量它的工作方式,但是根据我对页面的意图或布局我并不了解的一些事情进行推测
public ActionResult AddCertificate (AddCertificateViewModel model){ ...save to database return Partial("CertificateParital", CertificateModel); }
您可以使用Ajax表单
来完成此操作@using(Ajax.BeginForm(“action”,“controller”,new AjaxOptions {InsertionMode = InsertionMode.InsertAfter,UpdateTargetId =“CertificationsListContainer”}))
我认为这与博客文章和评论的工作方式相同。