3

我的模型:

public class Order
{
     public int OrderId { get; set; }
     public int Quantity { get; set; }
     public double Width { get; set; }
     public double Height { get; set; }
}

在我对该模型的强类型视图中,我有一个具有TextBoxFor该属性的表单,例如:

<table>
    <tr>
        <td><a href="#" onclick="AddTextBox()">+</a></td>
        <td>@Html.TextBoxFor(m => m.Quantity)</td>
        <td>@Html.TextBoxFor(m => m.Width)</td>
        <td>@Html.TextBoxFor(m => m.Height)</td>
    </tr>
</table>

带有 的链接AddTextBox()是一个 jQuery 函数,用于动态添加另一个表,例如包含三个以上文本框的表。

我的控制器:

[HttpPost]
public ActionResult SaveOrder(Order order)
{
    context.Order.Add(order);
    context.SaveChanges();
    return View();
}

调试时,我可以看到订单对象填充了表单中的数据,但仅填充了第一个数量、重量和高度文本框的值,我知道这是预期的行为,并且我知道我收到了所有值,因为我测试过下面的示例和我的列表已正确填写:

[HttpPost]
public ActionResult SaveOrder(List<int> Quantity, List<int> Width, List<int> Height)
{
    return View();
}

所以这里又是一个问题:我应该如何创建一个模型来保存该数据数组并保存在我的数据库中?

我希望我对这个问题很清楚,并感谢您的回答。

4

2 回答 2

0

您的视图模型必须有一个您要添加到的列表。您不能将模型添加到单音的固定实例(@model在您的视图中)。所以你的模型必须是可扩展的。

这是您的示例,编辑可变长度列表,ASP.NET MVC

看看他们做了什么,并为您的控制和视图做同样的事情。我完全基于这篇文章构建了我的应用程序——它足够简单,即使是新手(有基础知识)也能理解,并在你的领域内实现类似的功能。他们还有完整的演示源代码,您可以下载和使用

描述过程太长了,用简单的话你

  1. 在您的控制器中创建专用操作并使用 ajax 调用它以生成您想要添加到视图中的任何内容(textbox在您的情况下,但它肯定会更复杂)和

  2. $(<your selector>).append(<your result from ajax call>).

  3. 在发回控制器时,您将获得包含您在视图中添加/删除的实际项目数量的列表

  4. 您将它们一一添加到您的 DTO 并在完成后提交事务。

希望这可以帮助。

于 2012-08-10T16:17:03.107 回答
0

最后 !

我不知道我是否对我的问题很清楚,但这是我找到的解决方案,我不知道这是否非常简单,因为我对编程不是很有经验,所以感谢谁试图帮助我。

我不是只有一个模型,而是必须创建另一个模型来保存我的数据库中每个订单的所有度量,所以我将模型更改为如下所示:

public class Order
{
     public int OrderId { get; set; }
     public virtual List<Measures> Measures { get; set;}
     // I have many other properties here but i erased for simplicity...
}

public class Measures
{
     public int MeasuresId { get; set; }
     public int Quantity { get; set; }
     public double Width { get; set; }
     public double Height { get; set; }
     public Order Order { get; set; }
}

因此,在我添加了一些<input>动态之后,他们的所有名称属性都是数量、宽度或高度,而我在控制器上收到的响应是这样的:

Quantity: 10
Width: 20
Height: 16
Quantity: 3
Width: 14
Height: 10
Quantity: 500
Width: 2
Height: 5

最后,我的控制器是:

    [HttpPost]
    public ActionResult SaveOrder(Order Order, List<int> Quantity, List<double> Width, List<double> Height)
    {
        List<Measures> Measures = new List<Measures>();

        //At this point my Order model is filled with all the properties
        //that came from the form and I'll save it to the Database so that
        //this model can have its Id filled from the identity column
        unitOfWork.ServicosRepository.Insert(Order);
        unitOfWork.Save();

        //Now that I have the OrderId I can add how much Measures I want referencing
        //that OrderId to access that further on my View
        for (int i = 0; i < Quantity.Count; i++)
        {
            Measures measures = new Measures { Quantity = Quantity[i], Width = Width[i], Height = Height[i], Order = Order };
            unitOfWork.MedidasRepository.Inserir(medidas);
            unitOfWork.Salva();
            Medidas.Add(medidas);
        }

        return PartialView("_Emitir", Pedido);
    }
于 2012-08-10T22:28:29.173 回答