Asp.net mvc 4 DropDownListFor选择值的问题
我是MVC的新手(好吧,非常新)。我试图创建一个级联下拉列表,在这里我还可以预先选择一个值 我花了一天的大部分时间在这上面,但并没有走得很远。我查看了很多资源,但最有用的是: -我大量使用了它,并让我自己的版本工作,我无法让它工作 -现场一般情况 -这里有一个非常好的例子,遵循视图模型方法,但出于某种原因,它似乎对我不起作用 到目前为止,我得到的是: 型号:Asp.net mvc 4 DropDownListFor选择值的问题,asp.net-mvc-4,entity-framework-5,Asp.net Mvc 4,Entity Framework 5,我是MVC的新手(好吧,非常新)。我试图创建一个级联下拉列表,在这里我还可以预先选择一个值 我花了一天的大部分时间在这上面,但并没有走得很远。我查看了很多资源,但最有用的是: -我大量使用了它,并让我自己的版本工作,我无法让它工作 -现场一般情况 -这里有一个非常好的例子,遵循视图模型方法,但出于某种原因,它似乎对我不起作用 到目前为止,我得到的是: 型号: using System; using System.Collections.Generic; using Sys
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace BLPrototype.Models
{
public class VehicleModels
{
public List<vehicle_make> getVehicleMakeList()
{
using (var db = new BLEntities())
{
List<vehicle_make> vmk = db.vehicle_make.OrderBy(r => r.vmk_name).ToList();
return vmk;
}
}
public List<vehicle_group> getVehicleModelList(string vmk_id)
{
using (var db = new BLEntities())
{
List<vehicle_group> vmo = db.vehicle_group.Where(v => v.vg_vmk_id == vmk_id).OrderBy(r => r.vg_name).ToList();
return vmo;
}
}
}
public class vmCatalogue1
{
public string Title { get; set; }
[Display(Name = "Select a make")]
public IEnumerable<SelectListItem> selectVehicleMake { get; set; }
[Display(Name = "Select a model")]
public IEnumerable<SelectListItem> selectVehicleModel { get; set; }
}
}
public class VehicleModels
{
public List<vehicle_make> getVehicleMakeList()
{
using (var db = new BLEntities())
{
List<vehicle_make> vmk = db.vehicle_make.OrderBy(r => r.vmk_name).ToList();
return vmk;
}
}
public List<vehicle_group> getVehicleModelList(string vmk_id)
{
using (var db = new BLEntities())
{
List<vehicle_group> vmo = db.vehicle_group.Where(v => v.vg_vmk_id == vmk_id).OrderBy(r => r.vg_name).ToList();
return vmo;
}
}
}
public class vmCatalogue3
{
public string Title { get; set; }
public string selectedMakeId { get; set; }
public string SelectTopLine { get; set; }
[Display(Name = "Select a make")]
public SelectList selectVehicleMake { get; set; }
[Display(Name = "Select a model")]
public SelectList selectVehicleModel { get; set; }
}
视图:
@{
布局=空;
}
@模型名称
函数getModels(vmk_id){
$.ajax({
url:“@url.Action(“Models”)”,
数据:{vmk_id:vmk_id},
数据类型:“json”,
类型:“POST”,
错误:函数(){
警报(“发生错误”);
errorHandler(“error1”);
},
成功:功能(数据){
var项目=”;
$。每个(数据、功能(i、项){
项目+=“”+项目。文本+“”;
});
$(“#选择车辆模型”).html(项目);
}
});
}
$(文档).ready(函数(){
$(“#选择车辆制造”)。更改(功能(){
getModels($(“#selectVehicleMake”).val();
});
});
@模型BLPrototype.Models.VMCataloge1
@使用(Html.BeginForm())
{
@Html.LabelFor(m=>m.selectVehicleMake)
@Html.DropDownListFor(model=>model.selectVehicleMake,model.selectVehicleMake,“请选择”)
@Html.LabelFor(m=>m.selectVehicleModel)
@Html.DropDownListFor(m=>m.selectVehicleModel,Model.selectVehicleModel,new{style=“width:150px”})
}
上面的示例显示了级联下拉列表。我见过很多不同的方法来填充DropDownList for,我想通过视图模型来实现。我真的不知道哪种方法最好。有些示例似乎只显示一个列表,有些示例显示一个selectlistitems列表,而其他示例则显示一个selectlist列表。有没有人能告诉我两者之间的区别,以及“更好”的方法是什么。。。我知道这通常取决于应用程序
我也希望能够预先选择一个Make,如果我愿意的话,我已经看到了一些例子,其中您以各种方式包括ID,还有一些例子是通过将其标记到选择列表的末尾。它们似乎都不起作用
此外,除非选择了品牌,否则模型不应该真正显示。我会通过CSS或其他方法来实现这一点吗
最后,我在make的末尾添加了“Please Select”,如图所示。这似乎不是一个很好的方法。你能给我指一下正确的方向吗
谢谢你抽出时间,我为这么多愚蠢的问题感到抱歉
谢谢
JaySelectListItems列表更加明确,并为您提供了一个属性,但它更适合于多选列表,如果您的视图在其他地方需要原始列表,您将无法再访问该列表 看一看。在某些情况下,它可能更适合你。您可以获得这样一个:
myList.ToSelectList("ID", "Description")
或
加:
在包含“style=…”的同一个对象中,如果在选择某个选项之前需要占位符。我终于找到了我想要的解决方案。我会把它贴在这里,以防将来有人发现这篇文章有类似的错误 型号:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace BLPrototype.Models
{
public class VehicleModels
{
public List<vehicle_make> getVehicleMakeList()
{
using (var db = new BLEntities())
{
List<vehicle_make> vmk = db.vehicle_make.OrderBy(r => r.vmk_name).ToList();
return vmk;
}
}
public List<vehicle_group> getVehicleModelList(string vmk_id)
{
using (var db = new BLEntities())
{
List<vehicle_group> vmo = db.vehicle_group.Where(v => v.vg_vmk_id == vmk_id).OrderBy(r => r.vg_name).ToList();
return vmo;
}
}
}
public class vmCatalogue1
{
public string Title { get; set; }
[Display(Name = "Select a make")]
public IEnumerable<SelectListItem> selectVehicleMake { get; set; }
[Display(Name = "Select a model")]
public IEnumerable<SelectListItem> selectVehicleModel { get; set; }
}
}
public class VehicleModels
{
public List<vehicle_make> getVehicleMakeList()
{
using (var db = new BLEntities())
{
List<vehicle_make> vmk = db.vehicle_make.OrderBy(r => r.vmk_name).ToList();
return vmk;
}
}
public List<vehicle_group> getVehicleModelList(string vmk_id)
{
using (var db = new BLEntities())
{
List<vehicle_group> vmo = db.vehicle_group.Where(v => v.vg_vmk_id == vmk_id).OrderBy(r => r.vg_name).ToList();
return vmo;
}
}
}
public class vmCatalogue3
{
public string Title { get; set; }
public string selectedMakeId { get; set; }
public string SelectTopLine { get; set; }
[Display(Name = "Select a make")]
public SelectList selectVehicleMake { get; set; }
[Display(Name = "Select a model")]
public SelectList selectVehicleModel { get; set; }
}
视图:
希望这对别人有帮助 谢谢你的回复。我已经在模型中使用了一个SelectList,除非我遗漏了什么——这很可能!数据占位符很有趣,我在谷歌上快速搜索了一下,在这里找到了一个例子:对于找到这篇文章的任何人。我仍然不确定如何设置所选的值,是否必须为此使用SelectListItems?再次感谢您的回复。您可以在SelectList对象上设置SelectedValue或SelectedValue。有关这些属性的更多信息,请参阅我原始答案中的“SelectList”链接。或者你也可以像在下面接受的答案中那样使用构造函数参数。我喜欢/讨厌学习新东西,这让我想起了我第一次从VB5切换到VB.NET时,花了大约三个小时思考date为什么不起作用(date.now是必需的)。唯一的区别是现在MSDN帮助是无用的。
data-placeholder="Please Select"
public class VehicleModels
{
public List<vehicle_make> getVehicleMakeList()
{
using (var db = new BLEntities())
{
List<vehicle_make> vmk = db.vehicle_make.OrderBy(r => r.vmk_name).ToList();
return vmk;
}
}
public List<vehicle_group> getVehicleModelList(string vmk_id)
{
using (var db = new BLEntities())
{
List<vehicle_group> vmo = db.vehicle_group.Where(v => v.vg_vmk_id == vmk_id).OrderBy(r => r.vg_name).ToList();
return vmo;
}
}
}
public class vmCatalogue3
{
public string Title { get; set; }
public string selectedMakeId { get; set; }
public string SelectTopLine { get; set; }
[Display(Name = "Select a make")]
public SelectList selectVehicleMake { get; set; }
[Display(Name = "Select a model")]
public SelectList selectVehicleModel { get; set; }
}
public ActionResult Index()
{
VehicleModels vm = new VehicleModels();
var model = new vmCatalogue3();
model.selectedMakeId = "870";
model.SelectTopLine = "Please Select";
model.selectVehicleMake = new SelectList(vm.getVehicleMakeList(), "vmk_id", "vmk_name");
model.selectVehicleModel = new SelectList(vm.getVehicleModelList(""), "vg_id", "vg_name");
return View(model);
}
@Html.DropDownListFor(m => m.selectedMakeId, Model.selectVehicleMake, Model.SelectTopLine )