如何使用ajax在动态创建的表单上绑定数据以动态添加新输入

时间:2016-09-18 17:55:18

标签: c# asp.net-mvc

[已编辑]我的上一个问题已经重复,但我不这么认为,我在下面写下原因。如果我错了,如果你决定再做一次,请留下几句解释。我是开发中的新手,但是我读了很多关于主题的问题,这些问题已经被问过但仍然没有找到答案

我的目标是创建一个包含输入字段的表单,可以通过单击按钮从View添加。我不知道用户想要添加多少字段,而且我需要将该表格绑定到List< MyModel>并且当用户发送它时将返回到动作列表< MyModel>。

我创建了示例项目,向您展示我的解决方案,但该解决方案并不起作用。你能帮帮我吗?

  1. MyModel

    public class MyDogModel
    {
       public string Name { get; set; }
       public string Breed { get; set; }
    }
    
  2. 控制器

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            Session.Clear();
            return View();
        }
        [HttpPost]
        public ViewResult MyDogs (List<MyDogModel> myDogs) 
        {
            return View(myDogs);
        }
        [HttpPost]
        public PartialViewResult AddDog(List<MyDogModel> dogs)
        {
            int fieldsCount;
            if (Session["FieldsCount"] == null)
            {
                Session["FieldsCount"] = 1;
                fieldsCount = 1;
            }
            else
            {
                fieldsCount = (int)Session["FieldsCount"];
                Session["FieldsCount"] = fieldsCount++;
            }
            return PartialView(dogs);
        }
    }       
    
  3. 索引

    @{
    AjaxOptions options = new AjaxOptions
    {
        HttpMethod = "post",
        UpdateTargetId = "MyDogsForm",
        InsertionMode = InsertionMode.Replace
    };
    Layout = null;
    }
    <!DOCTYPE html>
    <html>
    <head>
        <meta name="viewport" content="width=device-width" />
        <title>Index</title>
        <script src="~/Scripts/jquery-1.8.0.js"></script>
        <script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>
    </head>
    <body>
        <div> 
            @Ajax.ActionLink("Add new dog", "AddDog", options)
            <div if="MyDogsForm">
            </div>
        </div>
    </body>
    </html>
    
  4. 此处在AddDog View中我在此字符串中出现空引用错误

  5. @ Html.TextBoxFor(d =&gt; d [i] .Breed); 抛出异常:&#39; System.NullReferenceException&#39;在System.Web.Mvc.dll

        @model List<WebApplication2.Models.MyDogModel>
        @using (@Html.BeginForm("MyDogs","Home"))
        {
            for (int i = 0; i < (int)Session["FieldsCount"]; i++)
            {
                @Html.TextBoxFor(d => d[i].Name);
                @Html.TextBoxFor(d => d[i].Breed);
            }
            <button type="submit">Send</button>
        }
    

    这是什么意思?我只想填写用户希望添加的狗的数量。

    编辑感谢@ stephen-muecke提供建议的解决方案。也许我错过了什么。但实际上我正在寻找解决方案,其中表单将在服务器上创建并实现一些数据。在JQuery添加的这个答案POST a form array without successful新字段中,如果服务器端表单不能通过ajax进行更改,我会尝试使用它,但是对于我来说,避免使用JQuery会更方便我需要不仅绑定TextBoxes,还绑定DropDownLists等,以及从数据库在服务器上生成的信息。

0 个答案:

没有答案