gpt4 book ai didi

c# - 将空列表从 Controller 传递到 Controller asp.net mvc

转载 作者:太空宇宙 更新时间:2023-11-03 15:35:28 25 4
gpt4 key购买 nike

我有一个名为 CreateBoard 的 Controller ,它插入 session 并显示在数据库中创建的所有 session 。我的发布版本没有问题并且没问题,所以我没有在问题中显示它。

[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>

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

最佳答案

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

删除 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 将值发布到一个单独的 Controller 方法,该方法返回一个包含 html 表的局部 View ,以避免每次都需要刷新整个页面。

关于c# - 将空列表从 Controller 传递到 Controller asp.net mvc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32025493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com