使用ASP.NET MVC动态添加

时间:2018-09-30 13:52:03

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

我正在一个ASP.NET MVC创建页面上,我希望能够为用户提供添加多个元素(如果他们愿意)的选项。我这样做的方法是在create动作的get方法中创建一个列表,并用5个空元素填充该列表,以供用户输入。然后,我将其呈现在视图中,如果该字段不为null,则将它们发布到数据库中,这一切都很好。

我希望对此进行改进,并为用户提供一个文本框,然后允许他们单击按钮以添加更多元素并动态填充列表。

我设法使用ajax调用按钮向视图添加更多元素,以调用部分视图动作,但是当我提交表单时,没有任何内容发布到我的create post方法中,我可以通过将鼠标悬停来查看在调试模式下覆盖对象。

所以我的问题是我提交表单时什么都没发布,这是我第一次在这里发布,感谢您的帮助。

准备好创建列表

[HttpGet]
public ActionResult Create()
{
    var viewModel = new ElementViewModel();
    viewModel.ElementList = new List<ElementViewModel>();

    return View(viewModel);
}

为列表中的每个元素调用局部视图的视图

<table>
    <thead>
        <tr>
            <th>Heading</th>
        </tr>
    </thead>
    <tbody>
        @foreach(var element in Model.ElementList)
        {
            @{ Html.RenderPartial("_PartialElement", element); }
        }
    </tbody>
</table>

每个元素的部分

@model ElementViewModel
<tr>
    <td>@Html.TextBoxFor(model => Model.Name)</td>
</tr>

单击按钮时通过ajax调用的局部视图方法

public PartialViewResult _NewElement()
{
     return PartialView("newElement", new ViewModel());
}

最后,创建元素的发布操作

[HttpPost]
public ActionResult Create(ElementViewModel viewModel)
{
    foreach(var element in viewModel.ElementList)
    {
        if(element.Name != "")
        {
            _context.Table.Add(new ElementEntity
            {
                Name = element.Name
            });

            _context.SaveChanges();
        }
    }
}

0 个答案:

没有答案