从视图向viewmodel添加数据

时间:2013-06-15 19:17:11

标签: asp.net-mvc-4 viewmodel

我正在使用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"  />  

}

1 个答案:

答案 0 :(得分:1)

我想我有一些批评

  • 为添加证书表单创建部分视图。
  • 可能会为循环中的证书显示创建局部视图,因此循环看起来像

      

    @ Html.Parital(“CertificatePartial”,x.Certificates [i])

  • 如果您的表单对于“强制”或“理想”证书是相同的,请在“添加证书”表单底部使用一个“保存”按钮。如果表格相同,则强制或理想条件应为证书的属性。它可以使用表单上的单选按钮包含在内,以便用户可以选择“强制”或“理想”。

我还有另外一种可能的方式来衡量它的工作方式,但是根据我对页面的意图或布局我并不了解的一些事情进行推测

  • 您可以随时使用ajax表单帖子来保存新的证书数据,然后使用javascript结果将其附加到您的认证列表中,即
 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”}))

我认为这与博客文章和评论的工作方式相同。