我有一个USER
和一个CAR
类。
我知道如何构建一个USER CREATE
表单,命名简单元素与db上的字段(如name,phonenumber)相同,所以在SUBMIT上,Action方法获取每个元素,我可以将它保存到db。
现在在CREATE表单上我还希望用户添加CARS,并在SUBMIT上发送List。
我是怎么做到的?
例如,我可以返回这样的集合或返回一个car元素,为每个car属性创建一个输入。
<form method="post" action="/Home/UpdateInts">
<input type="text" name="cars" value="1" />
<input type="text" name="cars" value="4" />
<input type="text" name="cars" value="2" />
<input type="text" name="cars" value="8" />
<input type="submit" />
</form>
public ActionResult UpdateInts(ICollection<int> cars) {
SaveMethod(cars);
}
但我如何接受
public ActionResult UpdateInts(ICollection<Car> myCars) {
SaveMethod(myCars);
}
我正在使用jQuery EasyUI grid在创建用户页面中添加汽车,制作和模型。
答案 0 :(得分:1)
我通过使用原始表单数据解决了它。因此不需要将模型传递给视图(不是MVC模式)。这不是最佳解决方案,而是一种可行的解决方案。如果我想出更好的解决方案,我会尽快更新。
<强>控制器:强>
[HttpPost]
public ActionResult AddCars(int a = 0){
var context = new ApplicationDbContext();
var form = Request.Form;
for (int i = 1; i < form.Count; i ++ )
{
context.Cars.Add(new Car() { Name = form[i] });
}
context.SaveChanges();
return View();
}
查看:
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>Car</h4>
<hr />
<input type="text" name="car1" value="car1" />
<input type="text" name="car2" value="car2" />
<input type="text" name="car3" value="car3" />
<input type="text" name="car4" value="car4" />
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
<强>模型强>
public class Car{
public int Id { get; set; }
public string Name { get; set; }
}
答案 1 :(得分:0)
制作一个包含汽车集合的用户的视图模型。
public clas ViewModel
{
//User properties
public IEnumerable<Car> Cars {get; set;}
}
在视图中使用此视图模型进行创建/编辑:
@model ViewModel
@using (Html.BeginForm())
{
//User Editor Here
@for(int i=0; i <= Model.Cars.Count(); i++)
{
@Html.EditorFor(x => Model.Cars[i])
}
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
行动
[HttpPost]
public ActionResult UpdateInts(ViewModel viewModel) {
//Get your user and cars here and save them
}