如何填写视图模型里面有名单,其中,T>点击提交按钮MVC 3后的财产? [英] How to fill ViewModel which has List<T> property after clicking submit button mvc 3?

查看:210
本文介绍了如何填写视图模型里面有名单,其中,T>点击提交按钮MVC 3后的财产?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想要使用视图模型的一周复选框一天。一切正常的查看,但是,如果我点击提交保存更改, weeklySchedule 在我httppost方法为空。

I want to make a day of the week checkbox using a viewModel. Everything is ok on the View, but, if I click submit to save changes, weeklySchedule within my httppost method is null.

为什么 weeklySchedule 空?如何将我送了选中的复选框值我 HttPost 行动?任何意见将帮助。

Why is weeklySchedule null? How would I send the selected checkbox value to my HttPost action? Any advice would help.

型号:

public class Settings
{
    public class WeeklySetting
    {
        public string DisplayName { get; set; }
        public string Value { get; set; }
        public bool IsChecked { get; set; }
    }
}

查看型号:

public class ViewModels
{
    public class Weekly
    {
        public List<Settings.WeeklySetting> Settings { get; set; }
    }
}


public ActionResult CreateWeekly()
   {
       var model = new ViewModels.Weekly
       {
             Settings = new[] 
             {
             new Settings.WeeklySetting{ DisplayName="Monday", Value="MON", IsChecked=false},
             new Settings.WeeklySetting{ DisplayName="Tuesday", Value="TUE", IsChecked=false},
             new Settings.WeeklySetting{ DisplayName="Wednesday", Value="WED", IsChecked=false},
             new Settings.WeeklySetting{ DisplayName="Thursday", Value="THU", IsChecked=false},
             new Settings.WeeklySetting{ DisplayName="Friday", Value="FRI", IsChecked=false},
             new Settings.WeeklySetting{ DisplayName="Saturday", Value="SAT", IsChecked=false},
              new Settings.WeeklySetting{ DisplayName="Sunday", Value="SUN", IsChecked=false},
            }.ToList()
       };
           return View(model);

   }
   [HttpPost]
   public ActionResult CreateWeekly(string submitButton, ViewModels.Weekly weeklySchedule)
   {

    //Do something
       return View("CreateWeekly", weeklySchedule);
   } 

查看:


<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MyProject.Controllers.ViewModels.Weekly>" %>

    CreateWeekly

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> CreateWeekly </asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<%使用(Html.BeginForm())       {%>

<% using (Html.BeginForm()) { %>

  &#60;div&#62;
  &#60;%foreach (var item in Model.Settings)
    {%&#62;

        &#60;%:Html.CheckBoxFor(q=&#62;item.IsChecked) %&#62;
        &#60;%:Html.LabelFor(q=&#62;item.IsChecked,item.DisplayName) %&#62;
        &#60;%:Html.HiddenFor(q=&#62;item.Value) %&#62;
   &#60;% } %&#62;

  &#60;/div&#62;
&#60;br /&#62;
   &#60;input value="GenerateForWeekly" name="submitButton" type="submit" /&#62;
      &#60;%} %&#62;

</asp:Content>

推荐答案

模型绑定,当你开始使用的foreach(不工作非常漂亮){}循环在你的看法。如果您使用的EditorTemplate为WeeklySetting你会发现它的效果要好得多,因为它挑选出所有的指数你。

Model binding doesn't work very nicely when you start using foreach() { } loops in your view. If you use an EditorTemplate for WeeklySetting you'll find it works much better as it sorts out all the indices for you.

例如。 (这是MVC3剃刀视图语法)

E.g. (this is MVC3 Razor view syntax)

(1)创建WeeklySetting编辑模板:

(1) Create an editor template for WeeklySetting:

@model Settings.WeeklySetting
@Html.CheckBoxFor(m => m.IsChecked)
@Html.LabelFor(m => m.IsChecked,Model.DisplayName)
@Html.HiddenFor(m => m.DisplayName)
@Html.HiddenFor(m => m.Value)

(2)呈现在你看来有EditorFor(没有的foreach):

(2) Render in your view with an EditorFor (no foreach):

@using (Html.BeginForm())
{
    <div>
        @Html.EditorFor(m => m.Settings)
    </div>
    <br />
    <input value="GenerateForWeekly" name="submitButton" type="submit" />
}

这篇关于如何填写视图模型里面有名单,其中,T&GT;点击提交按钮MVC 3后的财产?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆