【发布时间】:2021-12-27 16:53:56
【问题描述】:
我正在开发一个 .NET Core 3.1 Razor 页面应用程序。
请求
我需要创建一个页面,允许用户选择一个日期,将 X 天添加到该日期,然后生成一个包含这些日期的表格,并能够针对每个日期添加一个值。
接近
我有一个页面,允许用户选择开始日期(使用日期选择器)和一个数字(从下拉列表中),表示要添加到开始日期的总天数。
一旦用户点击 Set 按钮,就会对我的页面模型中的 Get Handler 进行 JQuery 和 Ajax (GET) 调用:
JQuery/Ajax
<script type='text/javascript'>
$(document).ready(function () {
//alert("Ready!");
$("#load").click(function () {
//alert("button");
var startDate = $("#StartDate").val();
var duration = $('#Duration').val();
var turl = '/SPC/Index?handler=CarPartial&StartDate=' + startDate + '&Duration=' + duration;
$('#spc_data_table').load(turl);
});
});
CSHTML
<div class="row">
<div id="spc_data_table" class="col-md-12">
</div>
</div>
页面模型
[BindProperty]
public IList<SpcTable> data { get; set; }
public class SpcTable
{
public int id { get; set; }
public string tableDate { get; set; }
public string tableValue { get; set; }
}
public PartialViewResult OnGetCarPartial(string StartDate, string Duration)
{
data = new List<SpcTable>();
var EndDate = Convert.ToDateTime(StartDate).AddDays(Convert.ToDouble(Duration) - 1);
int count = 0;
for (var date = Convert.ToDateTime(StartDate); date <= EndDate; date = date.AddDays(1))
{
data.Add(new SpcTable { id = count, tableDate = date.ToShortDateString(), tableValue = null });
count++;
}
return Partial("_SpcTable", data);
}
部分
<script type='text/javascript'>
$(document).ready(function () {
$('#submit').on('click', function (evt) {
evt.preventDefault();
$.post('', $('form').serialize(), function () {
alert('Posted using jQuery');
});
});
});
<table class="table">
<tr>
<td></td>
<td>Date</td>
<td>Value</td>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
<input type="hidden" name="data.Index" value="@item.id" />
<input type="hidden" name="data[@item.id].id" value="@item.id" />
@item.id
</td>
<td><input name="data[@item.id].tableDate" value="@item.tableDate" class="form-control form-control-sm" readonly/></td>
<td><input name="data[@item.id].tableValue" value="@item.tableValue" class="form-control form-control-sm" /></td>
</tr>
}
</table>
<div class="form-group row">
<button class="btn btn-primary" id="submit">Submit</button>
</div>
然后以 HTML 表格的形式返回部分页面,其中包含每个日期的一行。然后用户在每个日期旁边添加一个值,然后通过另一个 JQuery/Ajax 调用 (POST) 提交表单
但是,如果用户想要增加或减少表中的天数,他们可以从下拉列表中选择不同的数字并重新加载部分,但是,他们将输入的所有初始值表中的初始日期会丢失。
我的问题
- 有没有更好的方法来创建我的请求?
- 如果没有,有没有办法即使重新加载也可以将表值保留在部分中?
谢谢。
【问题讨论】:
-
嗨@tcode,你的
#load和#spc_data_table是什么?还有你的部分观点是什么?似乎您想保留为部分重新加载日期设置的值,对吗?我认为它不能说保留,而是将值传递给后端并回发到部分。 -
@Rena 感谢您的回复。我更新了我的问题并添加了
CSHTML页面,其中显示了spc_data_table和部分以及_SpcTable。你是对的,我确实想保留为部分重新加载日期设置的值。您知道如何通过发布到后端然后再次发布回 UI 来执行此操作吗?谢谢。
标签: jquery ajax asp.net-core razor-pages partial-views