我正在使用MVC,我想要有两个下拉列表,其中一个值依赖于另一个下拉列表。另外根据两个下拉菜单的组合保存相应的ID。MVC根据另一个选择动态加载下拉列表
我有一个由
码表我想有下拉一个是制造商的列表,然后根据离选择,我想下拉两到是有,任何车型作为制造商。然后,当我保存这些下拉列表的记录时,我想记录分配给该组合的ManufacturerModelID。这可能吗?
我正在使用MVC,我想要有两个下拉列表,其中一个值依赖于另一个下拉列表。另外根据两个下拉菜单的组合保存相应的ID。MVC根据另一个选择动态加载下拉列表
我有一个由
码表我想有下拉一个是制造商的列表,然后根据离选择,我想下拉两到是有,任何车型作为制造商。然后,当我保存这些下拉列表的记录时,我想记录分配给该组合的ManufacturerModelID。这可能吗?
如果我理解的很好,您想将MVC模型应用到您的应用程序。
如果是,则不存在“如果”的问题,您可以执行任何操作。你只需要将你的模型从你的视图和控制器中分离出来。
在你的情况,我会去“面向对象”的JavaScript。在对象中分离模型有助于理解MVC本身。 在像“MANUFACTUREAPP”这样的名称空间下编写所有内容也会有所帮助。 1)对于
a)您需要有一个对象“制造商”,像this.id,this.description,this.models = []这样的字段。然后你需要制定者,获得者和你的魔术功能,推动这一点。模拟它的模型。所以最后还有一个像getManufacturer()这样的函数,它会为你提供一个充满了制造商所有东西的对象。 b)你需要一个带有this.model,this.modelDescription,this.manufacturerID = [],setters,getters,init和你所有时髦功能的“ManufacturerModel”。
2)查看 a)你需要像你的功能“查看”对象:
onManufacturerClick = function(){
manufacturersModels = MANUFACTUREAPP.manufacturers.getMeWhatIwant(howIwantIt);
}
所以,现在你可以自豪的是您的应用程序支持MVC架构。
3)控制器只是遵循相同的概念。
在你的主,你想在你的初始化函数来创建对象,如:
init = function(){
MANUFACTUREAPP.manufacturers = new MANUFACTUREAPP.init();
}
两个友好的建议。从理论上研究MVC,因为如果你没有100%的理解它,它可能会变得棘手。我最好的建议是......拿一支钢笔,然后画出你的模特,如果你想保存三重奏和能量!
编辑
只注意到了asp.net标签。不管怎么样,我会离开这里。我不熟悉asp.net,但我想理论应该是相同的。
你可以使用jQuery和ajax来做到这一点。
假设你的剃须刀视图呈现这样的标记。
<select name="Manufacturer" id="Manufacturer">
<option value="1">Aaaaa</option>
<option value="2">Bbbbb</option>
<option value="3">Ccccc</option>
</select>
<select name="Model" id="Model">
</select>
现在有这个JavaScript在你的页面,它会监听第一选择要素的变化情况,并获得所选择的选项的值,并使用AJAX其发送到服务器。让您的服务器操作方法返回属于制造商ID的模型。
$(function(){
var urlForModesl = "/Manufacturer/Models";
$("#Manufacturer").change(function(){
var manufacturerId= $(this).val();
$.getJSON(urlForModesl,function(data){
var modelsHtml="";
$.each(data,function(a,b){
modelsHtml+="<option value='"+b.Id+"'>"+b.Name+"</option>";
});
$("#Model").html(modelsHtml);
});
});
});
假设您的模型操作方法返回带有JSON格式的Id和Name属性的对象列表。
public ActionResult Models(int id)
{
var list= db.ModelManufactors.Where(s=>s.ManufacturerId==id)
.AsEnumerable()
.Select(s=> new { Id=s.ManufacturerModelId, Name=s.Name}).ToList();
return Json(list,JsonRequestBehaviour.AllowGet);
}
这通常被称为“级联下降”,网上有很多例子。基本上,您会响应第一个下拉列表的更改事件来填充第二个下拉列表的值。这些值可以在JavaScript中存在客户端,可以通过AJAX获取,也许有基于AJAX的开箱即用控件来帮助等等。 – David