Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从for循环返回局部视图_C#_Asp.net_Ajax_Entity Framework_Partial Views - Fatal编程技术网

C# 从for循环返回局部视图

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

我的页面允许用户从复选框列表中选择业务,并将这些业务插入数据库

我使用foreach循环表单集合中的每个项,然后通过db上下文进行保存

所有这些都运作良好

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响应的意义相同


考虑更改局部视图以接受实体集合并在循环中渲染所有实体。

谢谢。我现在正在努力合并这个。谢谢你,詹姆斯。我现在正致力于将其合并。