【问题标题】:MVC passing to View type issue with dropdownMVC 通过下拉菜单传递给 View 类型问题
【发布时间】:2016-01-23 21:53:08
【问题描述】:

我试图通过一个下拉列表来查看视图,该列表由两个列表组成。一个用户拥有的 jobCode 列表和所有可用 jobCodes 的列表。我正在尝试将第三个列表传递到视图中,该列表是用户通过下拉列表拥有的所有作业代码,但我一直遇到这个问题......

The model item passed into the dictionary is of type 
'System.Collections.Generic.List`1[System.String]',
 but this dictionary requires a model item of type 
 System.Collections.Generic.IEnumerable`1[UserJobs]'.



public ActionResult addJob(string useCode)
{
    var jobs = jobsClient.GetAlljobs();
    var alljobsCode = (from s in jobs select s.jobCode).ToList();
    var thisUserJobCode = (from s in db.UserJobs
                               where s.useCode == useCode
                               select s.jobCode).ToList();
    var notObtained = alljobsCode.Except(thisUserJobCode);
    ViewBag.jobCode = new SelectList(notObtained, "jobCode", "jobDescription");

    return View(notObtained.ToList());
}

【问题讨论】:

标签: c# asp.net asp.net-mvc wcf asp.net-mvc-4


【解决方案1】:

变量alljobsCode 中的数据是我认为是字符串类型的jobCode 属性值列表。所以notObtained 变量也将具有相同的类型,因为您在 alljobscode 变量上调用Except 方法并将其结果设置为notObtained 变量,它是字符串的集合(特别是IEnumerable<string>)。您正在将此字符串集合传递给视图。

您的剃刀视图似乎被强类型化为UserJob 类的集合。所以你需要确保你返回的是一个集合而不是字符串集合。

您应该做的是,创建一个具有视图所需属性的新视图模型。

public class AddJobToUserVm
{
  public string UserCode { set;get;}

  //properties for the dropdown 
  public List<SelectListItem> JobsNotAddedYet { set;get;}
  public string SelectedJob { set;get;}

  // The below property is for listing existing jobs already added to the user
  public List<string> JobsOfUser {set;get;}
}

并在您的 GET 操作中,初始化此视图模型的对象并发送到视图。我硬编码了不同属性的值。您可以将其替换为 db 中的真实值。

public ActionResult AddJob(string userCode)
{
    var vm = new AddJobToUserVm {UserCode = client};
    vm.JobsNotAddedYet = new List<SelectListItem>
    {
        new SelectListItem {Value = "JobCode1", Text = "Job 1"},
        new SelectListItem {Value = "JobCode2", Text = "Job 2"}
    };
    vm.JobsOfUser = new List<string>() {"Job 25", " Job 26"};
    return View(vm);
}

您的视图将被强类型化到这个新的视图模型

@model AddJobToUserVm
<h2>Already added job for the user</h2>
@foreach(var item in Model.JobsOfUser)
{
 <p>@item</p>
}
<h3>Add new Job to user</h3>
@using(Html.BeginForm())
{
  <label>Select Job </label>
  @Html.DropDownListFor(x=>x.SelectedJob, Model.JobsNotAddedYet, "Please select")
  @Html.HiddenFor(s=>s.UserCode)
  <input type="submit" />
}

【讨论】:

  • Razor 视图通过转到 Add/View/List 自动搭建。有没有办法做到这一点?
  • 您真的要在视图中显示 3 个下拉列表吗?
  • 我不只是未获得,它是一个列表,其中删除了所有已获得的工作。
  • 我并没有完全按照您的意愿行事。看看我发布的更新。它应该负责呈现下拉菜单。
猜你喜欢
  • 1970-01-01
  • 2012-10-24
  • 2012-12-20
  • 1970-01-01
  • 1970-01-01
  • 2015-10-04
相关资源
最近更新 更多