我有一个 MVC 应用程序,我在其中收集有关具有 KENDO 控件的表单的详细信息,并且我可以使用 AJAX 更新几个下拉控件。
我目前面临的问题是,当我在下拉列表中提交具有更改值的表单时,其他控件不会更新模型,并且它保持不变,即使表单显示更新的值,模型也会保留旧值.
我已经尝试了各种解决方案并用谷歌搜索了足够多的东西,但没有成功。我将我的代码放在下面以显示我目前在做什么,那里的任何人都可以查看它并指导我做错了什么。
看法
@(Html.Kendo().DropDownList()
.Name("ddlDateRange")
.DataTextField("Name")
.DataValueField("Id")
.BindTo(Model.ReportIntervals)
.Events(e =>
{
e.Change((@<text>
function()
{
var selectedDateRange = $("#ddlDateRange").data("kendoDropDownList").value();
$.ajax({
url: '@Url.Action("ChangeStartEndDates")',
type: 'POST',
data: JSON.stringify({ selectedDateRange: selectedDateRange }),
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
success: function (data) {
$("#StartDate").data("kendoDatePicker").value(data.StartGamingDate);
$("#EndDate").data("kendoDatePicker").value(data.EndGamingDate);
},
error: function () { alert('Error in DateRange dropdownlist'); }
});
}
</text>));
})
)
@(Html.Kendo().DatePickerFor(model => model.StartGamingDate)
.Name("StartDate")
.Events(e =>
{
e.Change((@<text>
function()
{
var startDate = $("#StartDate").val();
var endDate = $("#EndDate").val();
$.ajax({
url: '@Url.Action("ChangeDateRangeName")',
type: 'POST',
data: JSON.stringify({ startDate: startDate, endDate: endDate }),
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
success: function (data) {
$("#ddlDateRange").data("kendoDropDownList").text(data.ReportInterval.Name);
},
error: function () { alert('Error in StartDate DatePicker'); }
});
}
</text>));
}))
@(Html.Kendo().DatePickerFor(model => model.EndGamingDate)
.Name("EndDate")
.Events(e =>
{
e.Change((@<text>
function()
{
var startDate = $("#StartDate").val();
var endDate = $("#EndDate").val();
$.ajax({
url: '@Url.Action("ChangeDateRangeName")',
type: 'POST',
data: JSON.stringify({ startDate: startDate, endDate: endDate }),
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
success: function (data) {
$("#ddlDateRange").data("kendoDropDownList").text(data.ReportInterval.Name);
},
error: function () { alert('Error in EndDate DatePicker'); }
});
}
</text>));
}))
控制器
**MODEL VALUES FORTHIS ACTION**
systemAuditReportViewModel.StartGamingDate = "01/01/2013";
systemAuditReportViewModel.EndGamingDate = "31/12/2013";
systemAuditReportViewModel.ReportInterval.Id = 30;
systemAuditReportViewModel.ReportInterval.Name = "Last Calender Year";
[HttpPost]
public JsonResult ChangeStartEndDates(int selectedDateRange)
{
SystemAuditReport systemAuditReportViewModel = new SystemAuditReport();
Nullable<DateTime> startGamingDate;
Nullable<DateTime> endGamingDate;
IG.General.Web.Model.ReportInterval reportInterval = new IG.General.Web.Model.ReportInterval();
reportInterval.Id = selectedDateRange;
IG.General.Web.Model.ReportIntervalFactory.GetDateRange(reportInterval, out startGamingDate, out endGamingDate);
systemAuditReportViewModel.StartGamingDate = startGamingDate;
systemAuditReportViewModel.EndGamingDate = endGamingDate;
return Json(systemAuditReportViewModel, JsonRequestBehavior.AllowGet);
}
**MODEL VALUES FOR THIS ACTION**
systemAuditReportViewModel.StartGamingDate = "27/03/2014";
systemAuditReportViewModel.EndGamingDate = "27/03/2014";
systemAuditReportViewModel.ReportInterval.Id = 2;
systemAuditReportViewModel.ReportInterval.Name = "Today";
[HttpPost]
public ActionResult GenerateReport(SystemAuditReport systemAuditReportViewModel)
{
var errors = ModelState.Values.SelectMany(v => v.Errors);
ReportContainer reportContainer = new ReportContainer();
if (ModelState.IsValid)
{
systemAuditReportViewModel.ReportPath = "/reports/";
//systemAuditReportViewModel.StartGamingDate = startDate;
//systemAuditReportViewModel.EndGamingDate = endDate;
this.CreateReport(systemAuditReportViewModel, out reportContainer);
}
return View(reportContainer);
}