我有隐藏字段的视图
@Html.HiddenFor(model => model.Driver.ID, new { htmlAttributes = new { id = "driver" } })
我有一个控制器,我想调用一个方法传递那个字段" driver",但调试我看到这个方法甚至没有被调用。
public string GetEditWarningMessage(int? driverID)
{
Driver driver = unitOfWork.DriverRepository.Get().Where(d => d.ID == driverID).FirstOrDefault();
string message = null;
if(!driver.Status.Equals("A"))
{
message = "This driver is assigned to current or future schedule movements";
}
return new JavaScriptSerializer().Serialize(message);
}
最后是javascript,我确信这是问题的根源
$().ready(function () {
$("#driver").change(function () {
$.get("../GetEditWarningMessage/" + $(this).val() + '?' + $.now(), function (response) {
var warning;
warning = $.parseJSON(response);
});
$("form").submit(function () {
var performEdit = false;
if (warning != null) {
performEdit = confirm(warning);
return performDelete;
}
});
});
});
基本上,如果我从GetEditWarningMessage()传递的消息为null,我不希望弹出窗口出现,否则弹出警告消息会弹出。
非常感谢,谢谢大家
答案 0 :(得分:0)
更改以下内容
$.get("../GetEditWarningMessage/" + $(this).val() + '?' + $.now(), function (response) {
var warning;
warning = $.parseJSON(response);
});
要
var warning;
$.get("../GetEditWarningMessage/" + $(this).val() + '?' + $.now(), function (response) {
warning = $.parseJSON(response);
});
在您的代码中变量" warning"只有$ .get调用范围。所以它不能用于表单提交调用.. 在$ .get调用之外声明它将解决问题。
如果隐藏的输入值没有改变,那么您必须在表单提交调用中调用 GetEditWarningMessage ..即使是同步ajax调用,以便表单提交可以等待警告消息的响应。