根据前一个列表中选择的值填充下拉列表(asp.net mvc3)

时间:2011-03-18 18:55:37

标签: asp.net-mvc asp.net-mvc-3 views

我正在尝试使用MVC 3和razor编写强类型的“创建”视图。我希望用户能够从下拉列表中选择一个客户(我使用控制器中的ViewBag从我的数据库中填充了这个)。当用户选择了一个客户时,我想要一个单独的下拉列表来生成属于该客户的狗的列表,该列表与数据库中的customerID相关。然后,表单上的“创建”按钮将同时将这两个值与其他字段一起保存并保存到数据库中。

非常感谢任何帮助

1 个答案:

答案 0 :(得分:1)

我将引用Darin's answer并在此添加您需要的内容,因为您不需要完全他提供的内容。但是,jQuery设置正是您所需要的。

添加包含客户属性和狗ID的视图模型。

public class CustomerDogCreateViewModel
{
    public string customerFirstName { get; set; }
    public string customerLastName { get; set; }
    // ... more properties from your ViewBag here
    public int dogID { get; set; }

    public CustomerDogCreateViewModel() { }
}

您只需要一个Controller操作,该操作返回部分回发的JSON并填充“Dogs”下拉列表。

public ActionResult Dogs(int customerID)
{
    // this is pseudo-LINQ, if you need help with your query,
    // we will need to know a little more about your data objects
    var dogs = // get dogs from your db
    select new
    {
        Id = dog.ID,
        Text = "Fido"
    };

    return Json(dogs, JsonRequestBehavior.AllowGet);
}

对于额外的客户数据,请在创建表单中将这些值添加为隐藏输入

<form action="/YourController/Create" method="POST" >
    <!-- select lists -->
    <input type="hidden" name="customerFirstName" value="@ViewBag.customerFirstName" />
    <input type="hidden" name="customerLastName" value="@ViewBag.customerLastName" />
    <input type="submit" value="Create" />
</form>

根据达林的回应,你可以用同样的方法将它连接起来。有一点需要提及;在我的回答中,只有Dog的ID属性会发布,所以一旦请求是服务器端,你将需要检索该对象并持久保存到你的数据库,但你的业务逻辑是有意义的。

[HttpPost]
public ActionResult Create(CustomerDogCreateViewModel vm)
{
    var dog = YourDb.Dogs.Where(d => d.ID == vm.dogID).SingleOrDefault();
    // you didn't identify your data objects, so persist these to your db as usual.
    return View("CreateSuccess");
}