【问题标题】:How to retrieve multiple Models From Single view如何从单个视图中检索多个模型
【发布时间】:2016-11-24 01:44:12
【问题描述】:

有没有一种方法可以在不使用强类型 HTML 帮助器的情况下从视图中获取模型对象到控制器中。视图使用Account 实体但需要发布表单并检索在foreach 循环中运行的变量的帐户实体,该循环用于生成值的表/网格。下拉列表中的信息用于不同的实体,因此它不是强类型的。

public class HomeController : Controller
{
    // GET: Home
    ModelContext model = new ModelContext();


    [HttpGet]
    public ActionResult Index()
    {


        return View(model.accounts.ToList());
    }

    [HttpPost]
    public ActionResult Index(Account account,List<string> status,string name)
    {
      // return student object
        return View();
    }
}

视图中的其余代码在foreach 循环上运行,以生成包含在@HTML.BeginForm 中的html table

<td>

        @Html.DropDownList("status",
        new SelectList(Enum.GetValues(typeof(ProjectName.Models.Code))),
        "...",
        new { @class = "form-control" })

</td>

<td>
    @Html.TextArea("comment");
</td>

【问题讨论】:

  • 您的DropDownList() 方法只回发一个值,因此参数必须是string status(而不是List&lt;string&gt; status)。但是话虽如此,您应该使用包含视图中所需的所有属性的视图模型,以便您可以对其进行强绑定、获取验证等。
  • 它返回一个输入数组,因为它在 foreach 循环中运行
  • 然后你生成无效的html作为开始!你肯定需要一个视图模型来正确处理这个
  • 但是视图模型将如何与上下文类一起工作? @StephenMuecke
  • 什么Context 类? - 你指的是你的数据库上下文吗? - 是这样,那么与它没有关系 - 您将数据模型映射到视图模型,反之亦然

标签: c# .net asp.net-mvc entity-framework


【解决方案1】:

您应该创建一个父视图模型,其中包含您在视图中需要的这两个视图模型。例如:

public class ViewModel
{
    public ProjectName.Models.Code Code {get; set;} 
    public ProjectName.Models.Account Account {get; set;}
}

另外,请看MVC - Multiple models in a view。我认为这对你有好处。

希望对您有所帮助!

【讨论】:

    猜你喜欢
    • 2018-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-19
    • 1970-01-01
    相关资源
    最近更新 更多