C# 从for循环返回局部视图
我的页面允许用户从复选框列表中选择业务,并将这些业务插入数据库 我使用foreach循环表单集合中的每个项,然后通过db上下文进行保存 所有这些都运作良好C# 从for循环返回局部视图,c#,asp.net,ajax,entity-framework,partial-views,C#,Asp.net,Ajax,Entity Framework,Partial Views,我的页面允许用户从复选框列表中选择业务,并将这些业务插入数据库 我使用foreach循环表单集合中的每个项,然后通过db上下文进行保存 所有这些都运作良好 public ActionResult RecordBusinesses(FormCollection collection) { foreach (var item in collection.GetValues("mycheckboxlist")) { modelentity
public ActionResult RecordBusinesses(FormCollection collection)
{
foreach (var item in collection.GetValues("mycheckboxlist"))
{
modelentity modelentity = new modelentity();
if (ModelState.IsValid)
{
db.modelentity.Add(modelentity);
db.SaveChanges();
}
return PartialView("_mypartialview", modelentity);
}
return PartialView("_mypartialview");
}
在视图中,复选框列表以ajax形式包装
@using (Ajax.BeginForm(
"RecordBusinesses",
new AjaxOptions
{
HttpMethod = "POST",
InsertionMode = InsertionMode.InsertBefore,
UpdateTargetId = "insertedbusiness"
}))
{
foreach(var b in Model)
{
<input type="checkbox" name="mycheckboxlist" value="@b.businessid">@b.name
<br />
}
</div>
<input type="submit" />
}
@使用(Ajax.begin)(
“唱片业”,
新选择
{
HttpMethod=“POST”,
InsertionMode=InsertionMode.InsertBefore,
UpdateTargetId=“insertedbusiness”
}))
{
foreach(模型中的var b)
{
@b、 名字
}
}
这个表单发布到动作,同样,一切都很好
public ActionResult RecordBusinesses(FormCollection collection)
{
foreach (var item in collection.GetValues("mycheckboxlist"))
{
modelentity modelentity = new modelentity();
if (ModelState.IsValid)
{
db.modelentity.Add(modelentity);
db.SaveChanges();
}
return PartialView("_mypartialview", modelentity);
}
return PartialView("_mypartialview");
}
我的问题是,只有第一个条目被发回屏幕。因此,如果复选框中只选择了一个业务,那么从控制器返回的partialview将添加到dom中,但是如果选择了多个业务,则只显示第一个业务
我猜这是因为控制器方法在第一次成功插入后“返回”,结束进程,并且没有进行后续调用
我唯一的困惑是,所有的业务都成功地插入。我希望这些也会失败,但刷新页面后,所有业务都会正确显示。这里的问题是您的操作
public ActionResult RecordBusinesses(FormCollection collection)
{
foreach (var item in collection.GetValues("mycheckboxlist"))
{
...
return PartialView("_mypartialview", modelentity);
}
return PartialView("_mypartialview");
}
一旦您从请求结束的操作返回,ASP.NET就不知道您想要迭代循环的其余部分。如果这样做了,它将导致对服务器的多个调用&来自服务器的多个调用,这可能是您无论如何都不想要的
想想看,你的代码相当于
for(int i = 0; i <= 10; i++)
{
Console.WriteLine(i);
return i;
}
我敢肯定,在ASP.NET中,在HTTP请求的上下文中,您无法做到这一点
解决方法是在服务器端执行所有渲染。更改您的操作以实际将模型传递回某个容器视图
public ActionResult RecordBusinesses(FormCollection collection)
{
List<Entity> myEntities = ...;
foreach (var item in collection.GetValues("mycheckboxlist"))
{
...
myEntities.Add(new ...);
}
return View("SomeContainerView", myEntities);
}
公共操作结果记录业务(FormCollection集合)
{
列出myEntities=。。。;
foreach(collection.GetValues(“mycheckboxlist”)中的var项)
{
...
myEntities.添加(新…);
}
返回视图(“SomeContainerView”,myEntities);
}
然后在您的视图中,调用渲染每个部分
@model System.Collections.Generic.List<Entity>
@foreach (var entity in Model)
{
@Html.RenderPartial("_mypartialview", entity)
}
@model System.Collections.Generic.List
@foreach(模型中的var实体)
{
@Html.RenderPartial(“\u mypartialview”,实体)
}
这里的问题是你的行动
public ActionResult RecordBusinesses(FormCollection collection)
{
foreach (var item in collection.GetValues("mycheckboxlist"))
{
...
return PartialView("_mypartialview", modelentity);
}
return PartialView("_mypartialview");
}
一旦您从请求结束的操作返回,ASP.NET就不知道您想要迭代循环的其余部分。如果这样做了,它将导致对服务器的多个调用&来自服务器的多个调用,这可能是您无论如何都不想要的
想想看,你的代码相当于
for(int i = 0; i <= 10; i++)
{
Console.WriteLine(i);
return i;
}
我敢肯定,在ASP.NET中,在HTTP请求的上下文中,您无法做到这一点
解决方法是在服务器端执行所有渲染。更改您的操作以实际将模型传递回某个容器视图
public ActionResult RecordBusinesses(FormCollection collection)
{
List<Entity> myEntities = ...;
foreach (var item in collection.GetValues("mycheckboxlist"))
{
...
myEntities.Add(new ...);
}
return View("SomeContainerView", myEntities);
}
公共操作结果记录业务(FormCollection集合)
{
列出myEntities=。。。;
foreach(collection.GetValues(“mycheckboxlist”)中的var项)
{
...
myEntities.添加(新…);
}
返回视图(“SomeContainerView”,myEntities);
}
然后在您的视图中,调用渲染每个部分
@model System.Collections.Generic.List<Entity>
@foreach (var entity in Model)
{
@Html.RenderPartial("_mypartialview", entity)
}
@model System.Collections.Generic.List
@foreach(模型中的var实体)
{
@Html.RenderPartial(“\u mypartialview”,实体)
}
您不能从一个操作返回多个部分视图,这与您不能为一个HTTP请求接收多个HTTP响应的意义相同
考虑更改部分视图以接受实体集合并在循环中呈现所有实体。一个操作不能返回多个部分视图,这与一个HTTP请求不能接收多个HTTP响应的意义相同
考虑更改局部视图以接受实体集合并在循环中渲染所有实体。谢谢。我现在正在努力合并这个。谢谢你,詹姆斯。我现在正致力于将其合并。