C# ASP.NET MVC 5-“;创建;视图,该视图可以通过单击“0”来处理IEnumerable的任意数量的元素;添加行“;按钮

C# ASP.NET MVC 5-“;创建;视图,该视图可以通过单击“0”来处理IEnumerable的任意数量的元素;添加行“;按钮,c#,asp.net,asp.net-mvc,asp.net-mvc-5,partial-views,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 5,Partial Views,我正在用C#/.NETMVC5为我的妻子写一个食谱管理器。我正在进入制作食谱的页面,我有点不知所措。食谱由名称和配料表组成 创建视图时,我有自己的表单: @using(Html.BeginForm()){ //Form elements @Html.DisplayNameFor(x => Model.Name) //button for adding a new ingredient to the recipe <input type="submit

我正在用C#/.NETMVC5为我的妻子写一个食谱管理器。我正在进入制作食谱的页面,我有点不知所措。食谱由名称和配料表组成

创建视图时,我有自己的表单:

@using(Html.BeginForm()){
    //Form elements
    @Html.DisplayNameFor(x => Model.Name)
    //button for adding a new ingredient to the recipe 
    <input type="submit" text="Submit New Recipe!" />
}
@使用(Html.BeginForm()){
//形式元素
@DisplayNameFor(x=>Model.Name)
//用于向配方中添加新成分的按钮
}
单击用于添加成分的按钮时,它应该在按钮本身上方的表单中呈现一块html,这样用户就可以添加任意数量的成分,然后在表单发布回控制器时提交食谱


对于这个功能,我应该让按钮调用发送回部分视图或其他内容的控制器吗?我不知道如何在JavaScript之外实现这一点,但如果可以的话,我想使用.NETMVC解决方案

我尽可能减少对javascript的依赖,但我同意@br4d的观点,在这里击倒是最好的选择。如果你想不惜一切代价避免它,它会更复杂、更慢,而且不会对用户友好,但我会这样做

将表格放在一个小格内。表格内有一个占位符小格,用来存放你的配料表。在控制器中进行“添加新成分”调用,该控制器将返回包含所需字段的局部视图。在target属性中,指定placeholder div作为更新目标,并通过指定InsertionMode.InsertAfter将响应附加到placeholder div的html中

<div id="parentDiv">
    @Html.BeginForm........
        @Ajax.ActionLink("Add New Ingredient","ActionName","ControllerName",routeValues,
                     new AjaxOptions
                    {
                        UpdateTargetId = "ChildDiv",
                        InsertionMode = InsertionMode.InsertAfter
                    }
        <div id=ChildDiv>
        </div>
</div>

@Html.BeginForm。。。。。。。。
@ActionLink(“添加新成分”、“ActionName”、“ControllerName”、RouteValue、,
新选择
{
UpdateTargetId=“ChildDiv”,
InsertionMode=InsertionMode.InsertAfter
}

这段代码并不全面,也不适合生产(我更喜欢用一种方法来处理失败的ajax调用,您可能希望在调用返回之前阻止交互,仅提及其中两个增强)。再次强调,敲除是最好的方法。

我总是使用javascript和类似敲除JS的东西来做这件事。否则,每次添加/编辑都必须在服务器上发布,并且需要花费很长时间才能输入一个包含许多信息的配方。这解决了我的问题。非常感谢!javascript可能是正确的方法,但我也将此项目视为一种学习体验。我想看看如何在“C#/MVC”中完成此项目方式而不是JS方式。当发回服务器时,由于那里有未知数量的元素,我是否需要将其作为FormCollection而不是Recipe对象传递?何时我可以将其作为一个整体对象传递回控制器,而不是FormCollection或从请求对象获取值?