我有一个隐藏表,它由返回模型的 Controller 操作填充。我一直在尝试使用与之前相同的方法来取消隐藏表格(通过 JS 切换),但是,单击按钮后,表格会短暂可见,但一旦 Controller 操作返回模型, table 又被隐藏了。下面是我的代码:
HTML:
用按钮表单
@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "submitForm"}))
{
<div class="row">
@*<input type="text" name="CasinoID" placeholder="Enter Casino ID" id="cIdSearch" />*@
<div>
Casino: @Html.DropDownList("CasinoID", Model.TerminalReceiptPostData.CasinoIdDDL, "Select Casino", new { id = "cIdSearch", @class = "custom-class-for-dropdown card" })
</div>
<div>
Date: <input id="datepicker" class="datepicker-base card" name="Date" placeholder="MM/DD/YYY" type="text"/>
</div>
<div>
<button type="submit" class="btn btn-sm btn-primary" id="search" onclick="toggleTable()"> Search Transactions</button>
</div>
</div>
}
隐藏表:
<hr />
<div class="row hidden" id="ReceiptsMainDiv">
<div class="col-md-12" style="overflow-y:scroll">
<table class="table table-striped table-hover table-bordered" id="terminalReceipts">
<thead>
<tr>
<th>Terminal ID</th>
<th>Local Transaction Time</th>
<th>Amount</th>
<th>Receipt</th>
<td class="hidden"></td>
</tr>
</thead>
<tbody>
@foreach (var item in Model.TransactionsTests)
{
<tr id="@String.Concat("rowIndex", Model.TransactionsTests.IndexOf(item))">
<td>@item.TerminalID</td>
<td>@item.TransactionTime</td>
<td>@item.Amount</td>
@*<td>@Html.ActionLink("View Receipt", "ViewReceipt", new { id = item.Id }, new { @class = "btn btn-primary btn-sm" }) <br /></td>*@
<td class="transactionID hidden">@item.Id</td>
<td>
@if (item.ReceiptData == null)
{
<button class="btn btn-sm btn-primary viewReceipt" disabled>View Receipt</button>
}
else
{
<button class="btn btn-sm btn-primary viewReceipt" data-rowindex="@String.Concat("rowIndex", Model.TransactionsTests.IndexOf(item))">View Receipt</button>
}
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
Controller Action :
[HttpPost]
public ActionResult Index(string CasinoID, DateTime Date)
{
//var id = Int32.Parse(Request.Form["CasinoID"].ToString());
var Cid = Request.Form["CasinoID"];
Cid = GetNumbers(Cid);
var id = Int32.Parse(Cid);
var model = TRBL.GetTransactionTestsData(id, Date);
model.TerminalReceiptPostData = TRBL.GetCasinosDDL();
return View(model);
}
JS:
function toggleTable() {
$("#ReceiptsMainDiv").toggle();
}
有什么更好的方法来解决这个问题?谢谢!
最佳答案
问题
看起来正在发生的事情是,默认情况下您隐藏了表格的 div 容器,并且您试图在单击“搜索交易”按钮时显示表格。
问题是单击该按钮,因为它是您表单的“提交”按钮,将刷新页面。这意味着您的切换代码不会在页面刷新后被调用。 (它将在页面刷新之前调用,这就是为什么您会短暂地看到结果)。
假设您希望隐藏表格除非其中有内容(例如,仅没有加载数据时隐藏表格),那么您有一个几个选项,我将在下面建议其中一个。
建议的解决方案
- 从提交/“搜索交易”按钮中删除您的“onClick”
- 删除 onClick 调用的函数
- 放置在页面加载时激活的 javascript
- 切换 div (
$("#ReceiptsMainDiv").toggle();
) 来“取消隐藏”它仅如果表中存在数据,在文档加载 javascript 函数中。
- 切换 div (
因为我没有模型类,所以我无法告诉您如何确定是否有数据,但是:
- 如果模型是一组值(例如,单个“交易”),那么您可能有一个
Id
字段- 查找
Id
字段是否为默认值以外的值。如果它是int
,检查Id > 0
应该就足够了。
- 查找
- 如果模型是“交易”的集合,请在集合本身上查找
Count > 0
。
希望这对您有所帮助!
关于javascript - Controller 操作返回模型后取消隐藏表的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57101990/