在Asp.net mvc4 razor视图中编辑和更新动态表中的行

时间:2015-04-15 11:14:46

标签: c# asp.net-mvc-4 razor

我是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。如何将表值带到控制器。请帮我解决这个问题。提前致谢

2 个答案:

答案 0 :(得分:0)

您遇到的问题是渲染输入的名称与您的模型结构不匹配。有几种方法可以解决这个问题:

  1. 制作模型类型的编辑器模板
  2. 你的部分观点:

    @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. 使用正确解析的名称手动创建输入 - “Gifts [x] .Property”
    2. 显然,第一个选择是更清洁,更不受欢迎。

      希望这有效,并有助于:)

答案 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="##" />