-1

我正在尝试将下拉列表绑定到我的模型,但我遇到了问题。传递给我的 HttpPost 函数的模型为 NULL,但前提是我尝试绑定到“产品”对象的 CategoryID 字段。如果我排除尝试绑定到 product.CatgeoryID,则 IncidentNumber 字符串不为空。感谢您的任何意见。

这是我的模型。

public class BIFireTypeModel
{
    public int ID { get; set; }
    public string Name { get; set; }
}


public class Product
{
    public int CategoryID { get; set; }
    public Product()
    {
        CategoryID = 0;
    }
}

这是我的控制器:

//
// GET: /BasicIdentification/
[HttpGet]
public ViewResult BasicIdentificationIndex()
{
    Product newproduct = new Product();
    ViewModelData vmd = new ViewModelData();
    vmd.product = newproduct;
    vmd.product.CategoryID = 2; 
    ViewBag.Categories = GetItems(); 
    return View(vmd); 
}        

[HttpPost]
public ActionResult BasicIdentificationIndex(ViewModelData product)
{      
    ViewBag.Categories = GetItems();         
    return View(product);           
}

public List<BIFireTypeModel> GetItems()
{
    List<BIFireTypeModel> categories = new List<BIFireTypeModel>();
    categories.Add(new BIFireTypeModel() { ID = 1, Name = "IA" });
    categories.Add(new BIFireTypeModel() { ID = 2, Name = "Extended Attack" });
    categories.Add(new BIFireTypeModel() { ID = 3, Name = "Large Fire Support" });
    return categories; 
}        

public class ViewModelData
{
    public String IncidentNumber { get; set; }       
    public Product product { get; set; } 
}

最后是我的cshtml:

@{

    using (Html.BeginForm())
    {     

        <h4>Incident Number</h4><input id="txtIncidentNumber" name="IncidentNumber" type="text" />           
        @Html.DropDownListFor(x => x.product.CategoryID, new SelectList(ViewBag.Categories, "ID", "Name"))      


        @* WILL CAUSE IncidentNumber in BasicIdentificationIndex(ViewModelData product) TO BE NULL
        <h4>Incident Number</h4><input id="afasf" name="product.CategoryID" type="text" />
            *@

            <input type="submit" value="Submit" />   
    }
}

编辑

在我的 Post 函数中,我可以使用 Request[] 访问 product.CategoryID,如下所示:

  [HttpPost]
    public ActionResult BasicIdentificationIndex(ViewModelData product)
    {
        String tmp = Request["product.CategoryID"];
        ViewBag.Categories = GetItems();    

        return View(product);           
    }

它返回正确的值。但是这个值不会绑定到我的模型中,如果我尝试对产品使用 DropDownListFor,ViewModelData 产品中的所有值都将为空。

4

2 回答 2

1

固定的:

这是问题所在。

public ActionResult BasicIdentificationIndex(ViewModelData product)

public class ViewModelData
{       
   public Employee product { get; set; } 
}

我的 ViewModelData 中对象的名称与 BasicIdentificationIndex() 中的参数相同。这引起了重大问题。我所要做的就是更改名称。

编辑: 其他非常重要的事情是,当我使用 EditorForModel() 时,我的下拉列表没有绑定,但是当我使用 @Html.EnumDropDownListFor 手动创建它们时,绑定有效。很高兴知道。

于 2013-05-22T18:18:46.730 回答
0

这是一个在同一个视图中填充三个 DropDownListFor 的示例方法:

视图模型:

public class GroupViewModel
{  
    public IEnumerable<SelectListItem> Schedules { get; set; }
    public int ScheduleId { get; set; }

    public IEnumerable<SelectListItem> Labs { get; set; }
    public int LabId { get; set; }

    public IEnumerable<SelectListItem> Terms { get; set; } 
    public int TermId { get; set; }
}


控制器:

public ActionResult Create()
{
    //Populate DropDownList binding values
    var model = new GroupViewModel
    {
        //Preselect the Lab with id 2
        //LabId = 2,

        Labs = repository.Labs.Select(c => new SelectListItem
        {
            Value = c.Id.ToString(),
            Text = c.Name
        }),
        Terms = repository.Terms.Select(c => new SelectListItem
        {
            Value = c.Id.ToString(),
            Text = c.Name
        }),
        Schedules = repository.Schedules.Select(c => new SelectListItem
        {
            Value = c.Id.ToString(),
            Text = c.Name
        })
    };
    return PartialView("_Create", model);
}


看法:

@Html.DropDownListFor(m => m.LabId, new SelectList(Model.Labs, "Value", "Text"), 
    "Select", new { @class = "selectpicker" })

@Html.DropDownListFor(m => m.ScheduleId, new SelectList(Model.Schedules, "Value", "Text"), 
    "Select", new { @class = "selectpicker" })

@Html.DropDownListFor(m => m.TermId, new SelectList(Model.Terms, "Value", "Text"), 
    "Select", new { @class = "selectpicker" })

希望这可以帮助...

于 2016-09-17T22:15:56.217 回答