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