【问题标题】:Add data to viewmodel from view从视图向视图模型添加数据
【发布时间】:2013-06-15 19:17:11
【问题描述】:

我正在使用 asp.net MVC 4。注意我为此使用了数组。我一直都知道列表使用 em,但这应该是数组。

问题
现在这是一个很长的列表和很多复选框。为了将其打包成更用户友好的 UI,我想要一个包含所有证书的保管箱。还有一个显示“添加强制性证书”的按钮以及一个显示“添加所需证书”的按钮。

我的解决方案(欢迎批评)
创建零件
将两个字符串属性交替添加到视图模型/或两个数组
创建一个下拉列表。
创建两个按钮(一个是强制性的,第二个是可取的)
创建两个隐藏字段
逻辑部分
在按钮上单击将下拉列表中证书的值添加/附加到 “强制”或“理想”的隐藏字段。
在控制器中拆分“,”上的字符串,并构建选择的“强制”/“理想”证书数组。

那是不是特别难看,或者我应该怎么做?

我有以下看法

@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"  />  

}

【问题讨论】:

  • 真的有问题还是只是在寻找批评?如果是这样,你应该去codereview.stackexchange.com
  • 是的,这个解决方案是否可行?

标签: asp.net-mvc-4 viewmodel


【解决方案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"}))

我有点假设这与博客文章和 cmets 的工作方式相同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 2017-05-04
    相关资源
    最近更新 更多