2016-07-14 252 views
0

我正在使用MVC,我想要有两个下拉列表,其中一个值依赖于另一个下拉列表。另外根据两个下拉菜单的组合保存相应的ID。MVC根据另一个选择动态加载下拉列表

我有一个由

enter image description here

码表我想有下拉一个是制造商的列表,然后根据离选择,我想下拉两到是有,任何车型作为制造商。然后,当我保存这些下拉列表的记录时,我想记录分配给该组合的ManufacturerModelID。这可能吗?

+0

这通常被称为“级联下降”,网上有很多例子。基本上,您会响应第一个下拉列表的更改事件来填充第二个下拉列表的值。这些值可以在JavaScript中存在客户端,可以通过AJAX获取,也许有基于AJAX的开箱即用控件来帮助等等。 – David

回答

0

如果我理解的很好,您想将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,但我想理论应该是相同的。

0

你可以使用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); 
} 
相关问题