Asp.net mvc 基于在上一个列表(asp.net mvc3)中选择的值填充下拉列表

Asp.net mvc 基于在上一个列表(asp.net mvc3)中选择的值填充下拉列表,asp.net-mvc,asp.net-mvc-3,views,Asp.net Mvc,Asp.net Mvc 3,Views,我正在尝试使用MVC3和razor编程一个强类型的“创建”视图。我希望用户能够从下拉列表中选择客户(我使用控制器中的ViewBag从我的数据库中填充)。当用户选择了一个客户时,我需要一个单独的下拉列表来生成一个由数据库中的customerID关联的属于该客户的狗的列表。然后表单上的“创建”按钮将获取这两个值以及其他字段,并将其保存到数据库中 非常感谢您提供的任何帮助我会在这里引用并添加您需要的内容,只是因为您并不需要他提供的内容。然而,jQuery设置正是您想要的 添加包含客户属性和狗ID的视图

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

非常感谢您提供的任何帮助

我会在这里引用并添加您需要的内容,只是因为您并不需要他提供的内容。然而,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() { }
}
对于部分回发和填充“Dogs”下拉列表,您只需要一个返回JSON的控制器操作

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>

非常感谢您的帮助,我了解我们正在尝试做什么,但我对JQuery不是很在行(tbh我从未正确使用过它),所以我已经准备好了一切(我不再通过viewbag传递客户详细信息,而是使用另一个答案中所示的方法。我唯一的问题是在选择客户后触发jquery函数-没有任何情况发生,因此即使我声明了jquery函数,dog下拉列表仍为空。提前感谢。)
[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");
}