ViewModel显示下拉列表不起作用 [英] ViewModel to display dropdownlist not working

查看:81
本文介绍了ViewModel显示下拉列表不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在独自学习ASP.NET MVC,并构建了一个从视频教程和阅读书中学到的示例Web应用程序。
我正在使用现有数据库首先使用代码来构建Web应用程序。使用Viewbag时,一切工作正常。当我尝试将viewbag更改为viewmodel时,我的代码开始中断。
我的模型如下:

I am learning ASP.NET MVC on my own and building a sample web app that I learned from video tutorials and reading books. I am building an web app using code first with existing database. Everything was working well when I was working with viewbags. When I tried to change viewbags to viewmodel, my code start breaking. My model looks like:

public partial class APPET1
{
    [Column("Doc Number")]
    [StringLength(255)]
    public string Doc_Number { get; set; }
    [StringLength(255)]
    public string CCode { get; set; }
    public DateTime? Date { get; set; }
    [StringLength(255)]
    public string Remark { get; set; }
    public int? StatusID { get; set; }
    public virtual Status Status { get; set; }

}

我的视图:

<table>
<tr>
  @using (Html.BeginForm("Index", "APPET1", FormMethod.Get))
  {

    <td>
<tr>
    <td width="200px"> <label>Search Everything </label></td>
    <td> @Html.TextBox("Search", null)</td>


    <td width="200px"><label>Search Document Number Only </label></td>
    <td>@Html.TextBox("DocNumber", null)</td>
</tr>
<tr>
    <td width="200px"><label>Remark Contains </label></td>
    <td>@Html.TextBox("Remark", null)</td>

    <td>Status</td>
    <td>@Html.DropDownListFor(t=>t.Status, Model.Statuses, "Select Status")</td>
</tr>

    </td>
         <tr>
             <td><button type="submit" class="btn btn-primary" style="font-weight:bold">Search</button></td>
    ..........some more codes .............

          }

        </tr>
    </table>

控制器中的IndexAction方法如下:

IndexAction method in my controller looks like:

public class APPET1Controller : Controller
{
    private APContext db = new APContext();

    // GET: APPET1
    public ActionResult Index(string search, string cagecode, string sortBy, int? page, string docNumber, string remark, string status)
    {
        APPETViewModel viewModel = new APPETViewModel();

        var aPPET1 = db.APPET1.Include(t =>T.APPETMedia)
                                    .Include(t => t.Status)
                                    .Include(t => t.APPETCCode)
                                    .Include(t => t.APPETDType);


        DateTime searchDate;
        if (!String.IsNullOrEmpty(search))
        {
            bool isDateSearch = DateTime.TryParse(search, out searchDate);
            if (isDateSearch)
            {
                aPPET1 = aPPET1.Where(s => s.Date_Received == searchDate);
            }

            else
            {
                aPPET1 = aPPET1.Where(t.Doc_Number.Contains(search)
                        || t.Status.Status1.Contains(search)
                        || t.Remark.Contains(search)
                        || t.CCode.Contains(search));
            //ViewBag.Search = search;
               viewModel.Search = search;
            }

        }
        var statuses = db.APPETS.Select(t => t.Status.Status1);

        if(!String.IsNullOrEmpty(status))
        {
           aPPET1 = aPPET1.Where(t => t.Status.Status1.Contains(status));

        }
        if (!String.IsNullOrEmpty(docNumber))
        {   
            aPPET1 = aPPET1.Where(t => t.Doc_Number.Contains(docNumber));
        }
        if (!String.IsNullOrEmpty(remark))
        {
            aPPET1 = aPPET1.Where(t => t.Remark.Contains(remark));
        }
 ............some more codes.........
        return View(viewModel);

    }

在我的ViewModel中,我添加了:

In my ViewModel I added:

    public string Status { get; set;} 
    public IEnumerable<SelectListItem> Statuses { get; set; }

我知道我错过了一些东西,但无法弄清楚。我读了很多stackoverflow的帖子,现在到了那个时候,您看到一个单词这么长时间,其拼写开始看起来很奇怪。根据我阅读的文章和文章,我遇到了值不能为空。参数名称:项目错误或没有IEnumberable类型的ViewData项错误。你们中的一位专家可以指出我需要做些什么才能使我的下拉列表正常工作。任何帮助都感激不尽。

I know I am missing something, but couldn't figure out what. I read many stackoverflow posts and now I am upto that point where you look at a word for so long and its spelling start looking weird. Based on the posts and article I read I am either getting "Value cannot be null. Parameter Name:items" error or "there is no ViewData item of type 'IEnumberable" error. Can one of you expert point me what I need to fix to get my dropdownlist working. Any help will be much appreciated.

推荐答案

在我的get操作方法中,我编辑了以下代码

In my get action method, I edited the following codes

var statuses = db.APPETS.Select(t => t.Status.Status1);

    if(!String.IsNullOrEmpty(status))
    {
       aPPET1 = aPPET1.Where(t => t.Status.Status1.Contains(status));

    }

var stats = db.Status.Select(s => s.Status1);
viewModel.Statuses = new SelectList(stats);
  {

     if (!String.IsNullOrEmpty(status))
        {
           aPPET1 = aPPET1.Where(t => t.Status.Status1.Contains(status));

        }
  }

,我的应用程序开始按预期运行。 @Stephen感谢您的及时答复和帮助。

and my app started working as expected. @Stephen thank you for you prompt response and help.

这篇关于ViewModel显示下拉列表不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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