如果缺少0索引,则控制器忽略List属性

时间:2017-05-09 23:52:59

标签: c# asp.net-mvc mongodb

我使用mongodb在c#.net mvc中构建一个webform来存储信息。该表单与公司对象一起使用,该公司对象具有一个名为addressdata的地址列表属性。提交表单后,公司对象将发送到控制器,然后插入到MongoDB中。输入名称采用

形式
class ArticlesController < ApplicationController

  def index
    @articles = Article.all
  end

  def show
    @article = Article.find(params[:id])
  end

  def new
  end

  def create
    @article = Article.new(article_params)

    @article.save
    redirect_to @article
  end

  private
    def article_params
      params.require(:article).permit(:title, :text)
    end

end

&#34; a&#34;是列表中的索引。这一切都很棒!地址对象列表在提交时创建并插入到mongoDB中。

但是,我刚刚添加了删除地址的功能,现在我遇到了麻烦。我注意到当用户删除第一行时,后面的所有行都会丢失。因此,如果他们删除0索引,则公司对象将不会填充地址列表,因此它们不会进入MongoDB。

有办法解决这个问题吗?这是它的设计方式吗?使用新索引重新编号以下所有行似乎太多了,但它需要什么?或者还有另一种方式吗?

1 个答案:

答案 0 :(得分:1)

根据我的经验,这是设计的。索引必须从0开始,或者您必须使用特殊元素为每个索引定义自己的索引。

本文展示了一个示例:http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/

<form method="post" action="/Home/Create">

    <input type="hidden" name="products.Index" value="cold" />
    <input type="text" name="products[cold].Name" value="Beer" />
    <input type="text" name="products[cold].Price" value="7.32" />

    <input type="hidden" name="products.Index" value="123" />
    <input type="text" name="products[123].Name" value="Chips" />
    <input type="text" name="products[123].Price" value="2.23" />

    <input type="hidden" name="products.Index" value="caliente" />
    <input type="text" name="products[caliente].Name" value="Salsa" />
    <input type="text" name="products[caliente].Price" value="1.23" />

    <input type="submit" />
</form>

所以你有选择:

  1. 删除时更新索引,或
  2. 定义任意索引