我有一个具有各种属性的模型,但感兴趣的是另一种模型的列表。

例如:

   public class User
    {
        public string Name { get; set; }
        public string Description { get; set; }

        public IEnumerable<UserInterest> Interests { get; set; }
    }

然后,我在视图中使用编辑器模板为模型项的每个项呈现视图。

@Html.EditorFor(x => x.Interests)    

EditorFor模板看起来像:

@model Interest

<div>
    @Html.HiddenFor(x => x.Id)
    @Html.TextBoxFor(x => x.InterestText)
    @Html.CheckBoxFor(x => x.Delete)
   ....
</div>

与此处接受的答案非常相似: 模型包含模型列表(MVC-3,Razor)

我的问题是 - 你如何从客户端(jQuery)在属性中创建一个新项目而不返回到服务器。 我目前有一个粗略的方法,我将数据发回给我的控制器,它返回模型返回与Interests属性中的新空白项目。

这似乎是矫枉过正的HTTP请求而不是非常优秀。 我在考虑使用jQuery .Clone(),但不完全确定在命名元素和清除现有值方面需要做些什么。

所以有人有任何建议。 我希望得到更多的意见和不同的方法。

#1楼 票数:2

您可以随意创建文本框和复选框,并将其添加到DOM。 保存时,使用jQuery ajax将该数据(新记录数据)发布到操作方法并保存在那里。 将状态返回(Succcess / Falied)从您的操作方法返回到您的客户端代码(您的jQuery ajax / post的回调函数)并在那里检查它。 如果成功,则向用户显示成功消息, append新项目append到现有列表。

示例jSFiddle: http//jsfiddle.net/carwB/2/

如果要返回一些复杂数据(例如:所有新记录及其ID等)以及状态,您可以从操作方法返回JSON

编辑:要使模型绑定与新添加的动态元素一起使用,您需要遵循元素的命名约定。

诀窍是以这种格式保持html元素的id属性值。 CollectionName_ ItemIndex __PropertyName

并以此格式命名属性值

CollectionName [ ItemIndex ] .PropertyName

我创建了一个示例工作程序,并解释其运行方式在这里根据您的要求。

#2楼 票数:1 已采纳

在这种情况下,我更喜欢使用客户端模板。 您使用ajax将数据发送到服务器,然后接收JsonResult 看看JsRender这是没有jQuery依赖的javascript库。

#3楼 票数:1

1.创建两个局部视图,一个是列表项,第二个是创建

2.First partail视图应该在id为'divMdeolList'的div内

3.and Creation视图将具有类似的代码

@using (Ajax.BeginForm("SubmitData", new AjaxOptions { UpdateTargetId = "divMdeolList" }))
{
 @Html.TextBoxFor(x => x.InterestText)
  <p>
            <input type="submit" value="Create" />
  </p>
}

4.然后在将呈现部分视图的控制器上创建ActionResult类型操作

public ActionResult SubmitData(YourModel model)
{  
  //Do : save the record 
  return PartialView("FirstPartailView", model);
}

这将更新View而不回发

  ask by Dave Hogan translate from so

未解决问题?本站智能推荐:

1回复

将隐藏的模型列表添加到Razor表单

我正在创建向导,并且需要传播已创建的列表。 该列表属于我的联系人模型。 我需要将其放在表单中,这样当我在最后一步中发回控制器时,我可以将联系人列表作为向导模型的一部分(它现在仅返回null)。 对于其他简单表单对象,我使用HiddenFor将数据保留在模型中。 这是行不通的,因为隐藏的f
2回复

MVC5Razor-显示在Viewbag列表中传递的项目的列表框

我将ViewBag列表传递给视图,并试图在列表框中显示此列表,以便可以选择此列表中的项目。 这是视图的控制器方法: 这是我目前所拥有的,但是未正确显示项目,如下图所示: 如何设置列表框的源,以便它显示通过Controller方法通过ViewBag.lstMembers传入的项目
1回复

下拉过滤器,在列表中添加新项目

有下拉列表,哪些元素在控制器中定义 并在视图上显示此下拉列表: 结果看起来像http://snag.gy/dkuGH.jpg 需要这个来做一个过滤器,并且我需要在下拉菜单中添加另一个项目:“全部”,我需要在什么地方编辑,添加这个项目?
1回复

如何使用Razor和.NETCore将项目添加到ViewModel中的列表?

所以这是我的情况。 假设我有一个名为TheView.cshtml.的视图TheView.cshtml. TheView.cshtml有一个名为TheViewModel.cs的 ViewModel。 在TheViewModel.cs ,驻留的对象(的List TheObject调用) TheObje
1回复

动态添加新项目的速度极慢

我使用ASP.NET MVC和Razor。 用户需要填充某种由对象列表组成的表格。 因此,我将空对象列表从控制器传递到视图。 这是我主要观点的一部分: 在ProductPartial中,用户为每个产品输入一些字段。 用户可以从列表中动态添加或删除产品。 删除我解决了jQuery的实
2回复

如何根据项目的属性组织视图中的项目列表?

我收集了一些物品。 这是我的视图模型: 所以我的收藏大约有200行。 多行可以具有相同的供应商名称,因此我的集合中有5个不同的供应商名称。 在我将视图模型传递给的视图中,我想显示每个供应商的名称,并且在每个供应商下面我想要显示该供应商名称的金额和税的网格。 我认为我需要在我看来这
4回复

如何在Razor视图中绑定Bropdown列表(如果视图未与任何模型绑定)

有人可以建议我如何在MVC Razor视图中绑定下拉列表。 我正在使用MVC4。我有一个未与任何模型类绑定的视图。 我有此示例代码。 我是MVC的新手,在此之后,我不知道如何将GetEmployeeTypes()方法返回的集合绑定到下拉列表中
1回复

(MVC4-Razor)post方法未捕获的模型中的模型列表

我有带有这样的模型的MVC应用程序: 我的控制器中的post方法是这样的: 我的观点是:(我使用Kendo UI)(PS:一些代码已被剥离并由注释代码代替) 但是问题在于,当我在视图中按下“提交”按钮时,将使用所有预期的数据(在Chrome中看到)调用控制器的方法,但是在此方法中,所