【问题标题】:Populating a dropdown list based on value selected in previous list (asp.net mvc3)根据上一个列表中选择的值填充下拉列表(asp.net mvc3)
【发布时间】:2011-03-18 18:55:36
【问题描述】:

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

非常感谢任何帮助

【问题讨论】:

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


    【解决方案1】:

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

    添加一个包含客户属性和狗 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() { }
    }
    

    您只需要一个返回 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>
    

    您也可以按照 Darin 的回复将其连接起来。有一件事要提;在我的回答中,只有 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");
    }
    

    【讨论】:

    • 感谢一百万您的帮助,我了解我们正在尝试做的事情,但我对 JQuery 不太擅长(我从来没有正确使用过它)所以我已经准备好了一切(我不再通过 viewbag 传递客户详细信息,而是使用另一个答案中显示的方法。我唯一的问题是在选择客户后触发 jquery 函数 - 没有任何反应,所以即使我我也没有任何反应,所以狗下拉列表保持为空已声明 jquery 函数。提前致谢
    猜你喜欢
    • 2020-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多