【问题标题】:How return an List<object> if a mvc form如果是 mvc 表单,如何返回 List<object>
【发布时间】:2015-06-01 02:41:06
【问题描述】:

我有一个USER 和一个CAR 课程。

我知道如何构建一个USER CREATE 表单,命名与数据库上的字段相同的简单元素(如姓名、电话号码)等等提交 Action 方法获取每个元素,我可以将其保存到数据库。

现在在 CREATE 表单上,我还希望用户添加 CARS,并在 SUBMIT 发送列表。

我该怎么做?

例如我可以像这样返回一个集合或者返回一个汽车元素,为每个汽车属性创建一个输入。

<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 在创建用户页面期间添加汽车、品牌和型号。

【问题讨论】:

  • 所以你想在一次提交时保存一个用户和一辆车?
  • 一个用户和N辆汽车一次提交
  • 您需要使用索引器生成具有正确名称属性的控件 - name="[0].Make"name="[0].Model"name="[1].Make"name="[1].Model" 等。在视图中动态创建新项目需要考虑的一些选项herehere

标签: asp.net-mvc


【解决方案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; }
}

【讨论】:

    【解决方案2】:

    为您的用户创建一个视图模型,其中包含汽车集合。

    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
    }
    

    【讨论】:

    • 这看起来很适合更新。但我认为我可以在发布前使用 Model.Car.add(newCar) 进行创建。
    • 提交后,您可以创建用户并填写其汽车集合。然后保存/更新到您的数据库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-11
    • 2016-09-21
    • 1970-01-01
    • 2022-09-24
    • 1970-01-01
    • 2016-11-26
    • 2017-12-18
    相关资源
    最近更新 更多