模型中的模型 - 在下拉列表中选择项目?

时间:2015-11-12 08:44:36

标签: c# html asp.net-mvc razor asp.net-ajax

所以我遇到了一个问题,我想在视图中使用多个模型,为了完成这项工作,我使视图使用了包含所有3个模型的模型。

LogStatisticsModel.cs

arr.map do |s|
  first,mid,last = s.split(/(:\d+:in\s*)/)
  [first, mid.gsub(/\D+/,'').to_i, last]
end

现在开始LogModelVM仍然可以正常工作,当我在视图上使用它除了一个小细节,下拉列表的值不再跟随控制器名称“SelectedCustomer”。但它现在尝试发送“LogModelVMObject.SelectedCustomer”。因此传递的值为null ..

enter image description here

_LogLayout.cshtml

namespace ASD.Models
{
    public class LogStatisticsModel
    {
        public LogModel LogModelObject { get; set; }
        public StatisticsModel StatisticsModelObject { get; set; }
        public LogModelVM LogModelVMObject { get; set;}
    }
}

LogModelsController.cs

@model ASD.Models.LogStatisticsModel

@using (Ajax.BeginForm("LogPartialView", "LogModelsController",
       new AjaxOptions
       {
             HttpMethod = "POST",
             InsertionMode = InsertionMode.Replace,
             UpdateTargetId = "divLogs",
       }, new
       {
          id = "NewTableId"
       }))
       {

       <p>@Html.TextBox("SearchString",null, new { @placeholder = "Message" })</p>
       if (Roles.IsUserInRole(WebSecurity.CurrentUserName, "Admin"))
       {
       <p>
       @Html.DropDownListFor(m => m.LogModelVMObject.SelectedCustomer, Model.LogModelVMObject.CustomerList, new {@id = "logdropdownlabel" })
       </p>
       }

       <p><input type="submit" class="standardbutton logsearch" name="submit" value="Search" /></p> 
       }

我现在应该如何获得控制器的价值?我假设我不能在控制器的函数中写“int?LogModelVMObject.SelectedCustomer”。

1 个答案:

答案 0 :(得分:1)

您可以像这样重写Html.DropdownList:

@Html.DropDownList("SelectedCustomer", Model.LogModelVMObject.CustomerList, new { @id = "logdropdownlabel" })

通过手动输入名称作为第一个参数,当您将数据发回控制器时,该名称应位于请求表单中。