我是asp.net MVC的新手。我的项目中有一个动态表。通过以下链接
实现在表中添加动态行Adding and deleting rows in dynamic table in Asp.net mvc razor view
我需要编辑和更新动态表。 我试过以下代码
我的样本模型
public class Gift
{
public string Name { get; set; }
public double Price { get; set; }
}
public class GiftViewModel
{
public string Age { get; set; }
public DateTime TheDate { get; set; }
public IEnumerable<Gift> Gifts { get; set; }
}
我的示例控制器
public class HomeController : Controller
{
[HttpGet]
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(GiftViewModel model)
{
// do work here
return RedirectToAction("Index");
}
public ViewResult AddNew()
{
return View("_TimeSheetView");
}
}
我的样本部分视图
@model HelloWorldMvcApp.Gift
@using (Html.BeginCollectionItem("giftList"))
{
<div>
<span class="drop_medium">
@Html.TextBoxFor(m => m.Name)
</span>
<span class = "drop_medium">
@Html.TextBoxFor(m => m.Price)
</span>
</div>
}
我的示例主视图
@model HelloWorldMvcApp.GiftViewModel
@using (Html.BeginForm())
{
@Html.TextBoxFor(m => m.Age)
@foreach (var data in Model.Gifts)
{
{ Html.RenderPartial("_TimeSheetView", data); }
}
@Html.ActionLink("Add another", "AddNew", null, new { id="addItem" })
<input type="submit" value="Save"/>
}
<script type="text/javascript">
$("#addItem").click(function () {
$.ajax({
url: this.href,
cache: false,
success: function (html) { $("#dynamic").append(html); }
});
return false;
});
</script>
当我点击“添加另一个&#39;按钮一行被添加到表中。编辑表格中的值后单击“提交”按钮时,控制器中没有任何内容。 IEnumerable Gifts变量为null。如何将表值带到控制器。请帮我解决这个问题。提前致谢
答案 0 :(得分:0)
您遇到的问题是渲染输入的名称与您的模型结构不匹配。有几种方法可以解决这个问题:
你的部分观点:
@model IEnumerable<HelloWorldMvcApp.Gift>
@Html.EditorForModel("","Gifts")
和Gift模型的EditorTemplate:
@model HelloWorldMvcApp.Gift
<div>
<span class="drop_medium">
@Html.TextBoxFor(m => m.Name)
</span>
<span class = "drop_medium">
@Html.TextBoxFor(m => m.Price)
</span>
</div>
显然,第一个选择是更清洁,更不受欢迎。
希望这有效,并有助于:)
答案 1 :(得分:0)
您的模型的集合属性名为Gifts
,因此部分需要
@model HelloWorldMvcApp.Gift
@using (Html.BeginCollectionItem("Gifts")) // not "giftlist"
{
...
}
这将生成具有正确名称属性的输入,以便绑定到集合(其中##
是Guid
)
<input name="Gifts[##].Name" ... />
<input name="Gifts[##].Price" ... />
<input type="hidden" name="Gifts.Index" value="##" />