将空列表从控制器传递到控制器ASP.NET MVC

霍曼

我有一个名为CreateBoard的控制器,该控制器可以插入会话并显示数据库中创建的所有会话。我的发布版本没有问题并且可以,所以我不在问题中显示。

[HttpGet]
public ActionResult CreateBoard(IEnumerable<BMModel> search)
{
    if (search != null)
    {
        ViewData["Boards"] = search;
        return View();
    }
    var db = new BoardMeetingEntities();
    var AllBoards = from p in db.tBoardMeetings
                    select new BMModel
                    {
                        Absent = p.Absent,
                        Attendent = p.Attendent,
                        BMDate = p.BMDate,
                        BMNo = p.BMNo.ToString(),
                        EndTime = p.EndTime,
                        StartTime = p.StartTime,
                        MPlace = p.MPlace,
                        IsFinal = p.IsFinal
                    };
    ViewData["Boards"] = AllBoards;
    return View();
}

public ActionResult SearchBoard(FormCollection form)
{
    string bmno = form["BMNo"].ToString();
    string bmdate = form["BMDate"].ToString();
    string mplace = form["MPlace"].ToString();
    if (bmno == string.Empty && bmdate == string.Empty && mplace == string.Empty)
    {
        return RedirectToAction("CreateBoard");
    }
    else
    {
        var db = new BoardMeetingEntities();
        var query = from p in db.tBoardMeetings
                    where p.BMNo.ToString() == bmno || p.BMDate.ToString() == bmdate || p.MPlace == mplace
                    select new BMModel
                    {
                        Absent = p.Absent,
                        Attendent = p.Attendent,
                        BMDate = p.BMDate,
                        BMNo = p.BMNo.ToString(),
                        EndTime = p.EndTime,
                        StartTime = p.StartTime,
                        MPlace = p.MPlace,
                        IsFinal = p.IsFinal
                    };
        IEnumerable<BMModel> q = query.ToList();
        return RedirectToAction("CreateBoard", new { search = q });
    }
}

这是我的观点:

@model MetronicTemplate.Models.BMModel
@{
    ViewBag.Title = "BoardMeeting";
    IEnumerable<MetronicTemplate.Models.BMModel> list = ViewData["Boards"] as IEnumerable<MetronicTemplate.Models.BMModel>;
}


<div class="tab-content">
<div class="tab-pane active" id="tab_1">
    <div class="portlet box blue">
        <div class="portlet-title">
            <div class="caption"><i class="icon-reorder"></i> sessions</div>
            <div class="tools">
                <a href="javascript:;" class="collapse"></a>
                <a href="#portlet-config" data-toggle="modal" class="config"></a>
                <a href="javascript:;" class="reload"></a>
                <a href="javascript:;" class="remove"></a>
            </div>
        </div>
        <div class="portlet-body form">
            @using (Html.BeginForm())
            {


                if (ViewData["Success"] != null)
                {
                    <div class="alert alert-success fade in alert-dismissable" role="alert">
                        <p href="#" class="alert-link" data-dissmiss="alert">@ViewData["Success"].ToString()
                    </div>

                }
                @Html.ValidationSummary(true, "", new { @class = "alert-danger fade in alert-dismissable", role = "alert" })
                <h3 class="form-section">
                    insert session
                </h3>
                <div class="row-fluid">
                    <div class="span3 ">
                        <div class="control-group">
                            <label class="control-label">session number</label>
                            <div class="controls">
                                @Html.TextBoxFor(m => m.BMNo, "", new { @class = "m-wrap span12 medium", id ="BMNo" })
                            </div>
                            <div class="controls text-error">
                                @Html.ValidationMessageFor(m => m.BMNo, "", new { @class = "m-wrap span12" })
                            </div>
                        </div>
                    </div>
                    <div class="span6 ">
                        <div class="control-group">
                            <label class="control-label">date </label>
                            <div class="controls">
                                @Html.TextBoxFor(m => m.BMDate, "", new { @class = "m-wrap span12 medium", id ="BMDate" })
                            </div>
                            <div class="controls text-error">
                                @Html.ValidationMessageFor(m => m.BMDate, "", new { @class = "m-wrap span12" })
                            </div>
                        </div>
                    </div>
                </div>
                <div class="row-fluid">
                    <div class="span3 ">
                        <div class="control-group">
                            <label class="control-label">start session</label>
                            <div class="controls">
                                @Html.TextBoxFor(m => m.StartTime, "", new { @class = "m-wrap span12 medium", id ="BMStart" })
                            </div>
                            <div class="controls text-error">
                                @Html.ValidationMessageFor(m => m.StartTime, "", new { @class = "m-wrap span12" })
                            </div>
                        </div>
                    </div>
                    <div class="span3 ">
                        <div class="control-group">
                            <label class="control-label">end of session </label>
                            <div class="controls">
                                @Html.TextBoxFor(m => m.EndTime, "", new { @class = "m-wrap span12 medium", id ="BMEnd" })
                            </div>
                            <div class="controls text-error">
                                @Html.ValidationMessageFor(m => m.EndTime, "", new { @class = "m-wrap span12" })
                            </div>
                        </div>
                    </div>
                    <div class="span3 ">
                        <div class="control-group">
                            <label class="control-label">place of session </label>
                            <div class="controls">
                                @Html.TextBoxFor(m => m.MPlace, "", new { @class = "m-wrap span12", id ="BMPlace" })
                            </div>
                            <div class="controls text-error">
                                @Html.ValidationMessageFor(m => m.MPlace, "", new { @class = "m-wrap span12" })
                            </div>
                        </div>
                    </div>
                </div>

                <div class="row-fluid">
                    <div class="span6 ">
                        <div class="control-group">
                            <label class="control-label">attendent</label>
                            <div class="controls">
                                @Html.TextBoxFor(m => m.Attendent, "", new { @class = "m-wrap span12", id ="BMPresent" })
                            </div>
                            <div class="controls text-error">
                                @Html.ValidationMessageFor(m => m.Attendent, "", new { @class = "m-wrap span12" })
                            </div>
                        </div>
                    </div>
                    <div class="span6 ">
                        <div class="control-group">
                            <label class="control-label">absent </label>
                            <div class="controls">
                                @Html.TextBoxFor(m => m.Absent, "", new { @class = "m-wrap span12", id ="BMAbsent" })
                            </div>
                            <div class="controls text-error">
                                @Html.ValidationMessageFor(m => m.Absent, "", new { @class = "m-wrap span12" })
                            </div>
                        </div>
                    </div>
                </div>

                <div class="form-actions">
                    <button type="submit" class="btn blue"><i class="icon-ok"></i> insert</button>
                    <button type="button" class="btn" onclick="cancel()">cancel</button>
                    <button type="submit" class="btn" formaction="@Url.Action("SearchBoard","BoardMeeting")">search</button>
                </div>


                if (list != null)
                {
                    <h3>the list</h3>
                    <table class="table table-striped table-hover table-bordered dataTable" id="sample_editable_1" aria-describedby="sample_editable_1_info" style="width:1000px;">

                        <thead>
                            <tr role="row">
                                <th class="sorting_disabled" role="columnheader" rowspan="1" colspan="1" style="width:5px;" aria-label="Username">sessoin no</th>
                                <th class="sorting" role="columnheader" tabindex="0" aria-controls="sample_editable_1" rowspan="1" colspan="1" style="width: 15px;" aria-label="Full Name: activate to sort column ascending">session date</th>
                                <th class="sorting" role="columnheader" tabindex="0" aria-controls="sample_editable_1" rowspan="1" colspan="1" style="width: 15px;" aria-label="Points: activate to sort column ascending"> session start</th>
                                <th class="sorting" role="columnheader" tabindex="0" aria-controls="sample_editable_1" rowspan="1" colspan="1" style="width: 50px;" aria-label="Delete: activate to sort column ascending">end of session</th>
                                <th class="sorting" role="columnheader" tabindex="0" aria-controls="sample_editable_1" rowspan="1" colspan="1" style="width: 75px;" aria-label="Edit: activate to sort column ascending">place of session</th>
                                <th class="sorting" role="columnheader" tabindex="0" aria-controls="sample_editable_1" rowspan="1" colspan="1" style="width: 114px;" aria-label="Delete: activate to sort column ascending">attendent</th>
                                <th class="sorting" role="columnheader" tabindex="0" aria-controls="sample_editable_1" rowspan="1" colspan="1" style="width: 114px;" aria-label="Delete: activate to sort column ascending">absent</th>
                                <th class="sorting" role="columnheader" tabindex="0" aria-controls="sample_editable_1" rowspan="1" colspan="1" style="width: 114px;" aria-label="Delete: activate to sort column ascending">status</th>
                                <th class="sorting" role="columnheader" tabindex="0" aria-controls="sample_editable_1" rowspan="1" colspan="1" style="width: 50px;" aria-label="Delete: activate to sort column ascending"></th>
                            </tr>
                        </thead>
                        <tbody role="alert" aria-live="polite" aria-relevant="all">

                            @foreach (var item in list)
                            {
                                <tr class="odd">
                                    <td class="center">@item.BMNo.ToString()</td>
                                    <td class="center">@item.BMDate.ToString()</td>
                                    <td class="center">@item.MPlace</td>
                                    <td class="center">@item.StartTime</td>
                                    <td class="center">@item.EndTime</td>
                                    <td class="center">@item.Attendent</td>
                                    <td class="center">@item.Absent</td>
                                    <td class="center">
                                        <span class="center">
                                            <input class="checker" type="checkbox" readonly
                                                   @if (item.IsFinal) { @: checked
                                                                                                                                                                    } />
                                        </span>
                                    </td>

                                    <td class=" "><a class="center" href="@Url.Action("BMDetail", "BoardMeeting", new { id = @item.BMNo })">bmdetail</a></td>
                                    <td class=" "><a class="center" href="@Url.Action("Agenda", "BoardMeeting", new { id = @item.BMNo })">bmorder</a></td>
                                    <td class=" "><a class="center" href="@Url.Action("BMDetailActivity", "BoardMeeting", new { id = @item.BMNo, z = true })">session analyse</a></td>
                                    <td class=" "><a class="center" href="@Url.Action("FinalizeBoard", "BoardMeeting", new { FID = @item.BMNo })">finalize</a></td>
                                    <td class=" "><a class="edit" href="javascript:;">edit</a></td>
                                    <td class=" "><a class="delete" href="javascript:;">delete</a></td>
                                </tr>
                            }
                        </tbody>
                    </table>
                }
            }
        </div>
    </div>
</div>

我的问题是,当我单击搜索按钮时,它会调用搜索板操作并完美地查询数据库,但是当它重定向到创建板操作时,该视图在表中不显示任何内容。我跟踪了代码,并注意到搜索板中的查询具有没问题,但是当涉及到createboard动作时,搜索参数没有任何价值。我错过了什么吗?

用户名

您不能将对象的集合传递给GET方法。RedirectToAction()方法将使用.ToString()您传递的对象方法作为路由参数来生成查询字符串。在您的情况下,您的对象是List<BMModel>,这意味着它正在传递search = "System.Collection.Generic.List<yourAssembly.BMModel>",无法绑定到您的参数。幸运的是,这行不通,因为它确实很容易超出查询字符串限制并引发异常。

删除POST方法并更改GET方法以包含要发布的3个参数。

[HttpGet]
public ActionResult CreateBoard(int BMNo, DateTime BMDate, string MPlace)
{
  ViewData["Boards"] = // Generate and filter your query here based on the parameters
  return View()
}

并将您的表格更改为 FormMethod.Get

@using (Html.BeginForm("CreateBoard", "yourControllerName", FormMethod.Get))
{
    ....
}

请注意,您当前查看的视图显示了许多与您的搜索查询无关的控件,因此不清楚它们的用途。

我建议您考虑使用ajax将值发布到单独的控制器方法中,该方法返回包含html表的局部视图,以避免每次都刷新整个页面。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将列表从控制器传递到ASP.NET MVC中的javascript函数?

将列表项从控制器传递到 javascript 函数并在 asp.net mvc 中搜索项?

ASP.NET MVC - Ajax 将空值传递给控制器

ASP.Net MVC如何将数据从视图传递到控制器

将多个参数从Ajax Post传递到ASP.NET MVC控制器

如何将元组从JavaScript传递到ASP.NET MVC控制器操作

将HTML字符串从控制器传递到View ASP.Net MVC

ASP.NET MVC - 将动态 ExpandoObject 从控制器传递到视图时出现 RuntimeBinderException

将整个对象从视图传递到ASP.NET MVC 5中的控制器

将图像传递到控制器ASP.NET MVC

ASP.NET MVC C# - 将数据从控制器传递到类

使用ASP.NET MVC将表对象从视图传递到控制器

使用asp.net mvc将DropDownList中的SelectedValue从View Razor传递到控制器

无法将数据从视图传递到控制器 ASP.NET MVC 5

将数据发布到控制器 Asp.Net Core MVC 时模型为空

Asp.net MVC 5-视图将空数据发布到控制器

从视图调用控制器并将值从视图传递到 asp.net mvc 中的控制器

如何将数据从ASP.NET WebAPI ApiController传递到ASP.NET MVC控制器?

将 HTML 从 ASP.NET MVC 控制器传递到浏览器直接链接不会呈现 HTML 标记

ASP.NET MVC从同一控制器发布到控制器的操作

将由javascript创建的控件列表的值从视图传递到asp.net mvc3中的控制器

无法将模型从 ASP.NET MVC 中的视图传递回控制器。收到时模型为空

如何将AppSettings从ASP.NET Core MVC控制器传递到ReactJS / Redux ClientApp?

如何将多个参数从表单传递到 Asp.net MVC 核心中的控制器?

如何将ID从剃刀视图传递到ASP .Net MVC中控制器的操作方法?

将Viewbag数据从View传递到ASP.Net MVC3 Razor中的控制器

如何将隐藏字段值从视图传递到控制器ASP.NET MVC 5

如何将值从视图传递到MVC ASP .NET中的另一个控制器

如何将字符串值从 WidowsForm 传递到 ASP.NET MVC 控制器