【问题标题】:can i send viewmodel and IEnumerable to a view together我可以将 viewmodel 和 IEnumerable 一起发送到视图吗
【发布时间】:2013-09-15 07:29:21
【问题描述】:

我可以查看(在数据库中:右键单击表格---->查看)和模型一起进入查看页面吗?

我在页面上有一些文件想要将其内容发送到一个操作结果(所以我应该将模型传递给我的视图,是吗?) 然后操作结果的结果是在数据库中查看。事实上,我在查看页面上有一些 tds 想通过 QuerySelect(在数据库中查看)来填充它们。

我确实喜欢下面。如果我单击第一个按钮,我的模型将为空(在 [HttpPost] 中)。 如果单击第一个按钮,我的模型也是空的。

查看:

       @model Project.Models.MyClass.WholeList


       @using (Html.BeginForm("listPlayer", "Player", FormMethod.Post))
                        {
                            @Html.AntiForgeryToken()
          @Html.TextBoxFor(m => m. PSearch.name, new { @placeholder = "* Enter name" })
           <input type="submit" value="search via name" name="Search" class="btn btn-general" />

                         }

     @model IEnumerable<Project.Models.vw_Players >

    @foreach (var item in Model)
    {
        <tr>

            <td class="stock">
                @Html.DisplayFor(modelItem => item.nam)
            </td>
            <td class="stock">
                @Html.DisplayFor(modelItem => item.cost)
            </td>
            <td class="stock">@item.number</td>
            <td class="stock">
                @Html.DisplayFor(modelItem => item.coach)
            </td>
        </tr>
    }

               @using (Html.BeginForm("listPlayer", "Player", FormMethod.Post))
                        {


                                  <select name="daystart">
                                    @for (var day = 1; day <= 31; day++)
                                    {
                                        <option value="@day">@day</option>
                                    }

                                </select>
                            <select name="monthstart">
                                <option value="01">1</option>
                                <option value="02">2</option>
                                <option value="03">3</option>
                                <option value="04">4</option>
                                <option value="05">5</option>
                                <option value="06">6</option>
                                <option value="07">7</option>
                                <option value="08">8</option>
                                <option value="09">9</option>
                                <option value="10">10</option>
                                <option value="11">11</option>
                                <option value="12">12</option>

                            </select>
                            <select name="yearstart" >
                                @for (var year = 2013; year <= Myfuc(DateTime.Now); year++)
                                {
                                    <option value="@year">@year</option>
                                }

                            </select>
               <input type="submit" value="seaech" class="btn btn-general" />
                                  }

MyClass.cs:

       public class Search
       {
    [Required(ErrorMessage = "required")]
    public string name { get; set; }
    public int daystart { get; set; }
    public int monthstart { get; set; }
    public int yearstart { get; set; }
    }

    public class WholeList
    {

        public List<Project.Models.vw_ Players > Player { get; set; }
        public Search  PSearch { get; set; }
    }

控制器:

       [httpGet]
        public ActionResult ListPlayer()
             {

            var db = new ProjectContext();
        var objWhol = new MyClass.WholeList ();
        objWhol.Player = db.vw_Players.ToList();
        return View(objWhol);
        }


    [HttpPost]
    public ActionResult ListPlayer ( MyClass.WholeList model)
    {
        if (ModelState.IsValid )
        {
            var myvarible = MyClass.Coachlistpalayer();
             model.Player = myvarible.Where(p => p.nam.ToUpper()).ToList();
            else
            { }
            return View(model);
        }


    }

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4


    【解决方案1】:

    您需要通用ViewModel 来实现这一点。类似的东西

    public class myViewModel
    {
      public List<Project.Models.vw_Players> players {get; set;}
      public MyviewModel Mymodel {get; set;}
    }
    

    在视图中:

    @model Project.Models.myViewModel
    
    @foreach (var item in Model.players)
    {
    //** do somthing
    }
    
    
    @Model.Mymodel.day //** or something else
    

    已编辑。

    您还需要将您的公共ActionResult ListPlayer() 更改为返回myViewModel。类似的东西:

    public ActionResult ListPlayer()
    {
      MyviewModel model = new MyviewModel
    {
    //** define properties here
    }
     List<vw_Players> players_ = db.vw_Players.ToList();
    
    var result = new myViewModel
    {
    players = players_,
    Mymodel = model
    }
    
    return View(result);
    
    }
    

    【讨论】:

    • 谢谢。但我应该像这样使用 Mymodel:我更新了我的问题。请看
    • @niki 是的,但您不需要添加 Model.Mymodel。 View 只能渲染一个模型。在您的情况下,它将是模型 Project.Models.myViewModel,其中包含模型播放器和 Mymodel。
    • 为什么它说“对象引用未设置为对象的实例。”在@foreach(Model.players 中的变量项)上?
    • @niki 什么会返回您的公共 ActionResult ListPlayer()?它应该返回 myViewModel
    • Andrey.Gubal 我正在编辑我的问题,我会向你展示我的编码。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    • 2022-08-14
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    • 1970-01-01
    相关资源
    最近更新 更多