如果在mvc中满足某些条件,则简单确认弹出窗口

时间:2015-03-04 14:51:29

标签: c# jquery model-view-controller

我有隐藏字段的视图

@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,我不希望弹出窗口出现,否则弹出警告消息会弹出。

非常感谢,谢谢大家

1 个答案:

答案 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调用,以便表单提交可以等待警告消息的响应。