[已编辑]我的上一个问题已经重复,但我不这么认为,我在下面写下原因。如果我错了,如果你决定再做一次,请留下几句解释。我是开发中的新手,但是我读了很多关于主题的问题,这些问题已经被问过但仍然没有找到答案
我的目标是创建一个包含输入字段的表单,可以通过单击按钮从View添加。我不知道用户想要添加多少字段,而且我需要将该表格绑定到List< MyModel>并且当用户发送它时将返回到动作列表< MyModel>。
我创建了示例项目,向您展示我的解决方案,但该解决方案并不起作用。你能帮帮我吗?
MyModel
public class MyDogModel
{
public string Name { get; set; }
public string Breed { get; set; }
}
控制器
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);
}
}
索引
@{
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>
此处在AddDog View中我在此字符串中出现空引用错误
@ 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等,以及从数据库在服务器上生成的信息。