【发布时间】:2013-11-14 16:23:21
【问题描述】:
我正在开发一个可以选择使用 VIN 解码器来获取汽车信息的应用程序。您可以输入 VIN,也可以通过下拉菜单、制造商、年份、品牌、型号等进行选择。
制造商下拉菜单是页面上唯一初始化的内容,没有选择值。选择制造商将查找该制造商的所有可用年份并返回年份列表,以及返回制造商列表和选定的制造商列表。选择年份将返回可用制造商、年份和制造商的列表,同时确定选定的制造商和选定的年份,依此类推。
此工作流程运行良好,我的所有下拉菜单均正确显示。但是,当输入 VIN 时,我已经为每个选项选择了值,并且仍然可以找到可用选项的列表,并完全按照我之前手动选择选项的方式呈现页面。当我这样做时,除了制造商之外,所有下拉列表都使用正确的选定属性正确呈现。
我试图尽可能地隔离它,并剥离了其他所有东西,我现在有了这个:
查看:
@model My_Project.Models.Data
@using System.Web.Helpers
@using (Html.BeginForm("Temp", "Home", FormMethod.Post, new { id = "formIndex" }))
{
<div>
VIN:
@Html.TextBox("vin", Model.VIN) <button type="submit">Go!</button>
</div>
<div>
Manufacturer: (@Model.ManufacturerId)
@Html.DropDownListFor(m => m.ManufacturerId, Model.Manufacturers, new { style = "width: 175px;" })
</div>
}
型号:
namespace My_Project.Models
{
[Serializable]
public class Data
{
public string VIN { get; set; }
public int ManufacturerId { get; set; }
public SelectList Manufacturers { get; set; }
}
}
控制器:
public ActionResult Temp()
{
Data model = new Data
{
Manufacturers = DBAccess.getManufacturers()
};
Session["ModelData"] = model;
return View(model);
}
[HttpPost]
public ActionResult Temp(Data newData)
{
Data oldData = Session["ModelData"] as Data;
oldData.ManufacturerId = 20;
Session["ModelData"] = oldData;
return View(oldData);
}
如果我在 Temp() 中设置制造商 ID,那么无论选择哪个制造商,我的下拉列表都会正确呈现。如果它在发布响应中设置,下拉列表会呈现所有正确的选项,但没有选择正确的制造商。如果您查看视图,我实际上让它向我显示制造商 ID,以确保它正确获取数据,并且制造商 ID 设置为列表中的值,但未选中。
鉴于用于渲染视图的模型看起来相同,我无法弄清楚这两个实例之间的区别。最重要的是,如果通过选择制造商来调用 post 方法(此时我已经剥离了该功能),它将返回相同的模型但也可以正确渲染。
什么会导致这个在帖子返回时无法正确呈现?
【问题讨论】:
标签: asp.net-mvc html.dropdownlistfor dropdownlistfor