从View到Controller返回时未设置模型值

时间:2012-11-09 00:25:53

标签: jquery asp.net asp.net-mvc-4

我有一个布尔模型变量,其值应该设置为TRUE,以便在返回Controller时执行一个过程。

它在我的本地计算机上运行绝对正常,但在远程Web服务器上运行。

有人可以告诉我我错过了什么吗?下面是布丁的证明":问题中的布尔值为" ShouldGeneratePdf ";

MODEL:

namespace PDFConverterModel.ViewModels
{
    public partial class ViewModelTemplate_Guarantors
    {
        public ViewModelTemplate_Guarantors()
        {
            Templates = new List<PDFTemplate>(); 
            Guarantors = new List<tGuarantor>(); 
        } 

        public int SelectedTemplateId { get; set; }
        public List<PDFTemplate> Templates { get; set; }

        public int SelectedGuarantorId { get; set; }
        public List<tGuarantor> Guarantors { get; set; }

        public string LoanId { get; set; }
        public string DepartmentId { get; set; }
        public bool isRepeat { get; set; }
        public string ddlDept { get; set; }
        public string SelectedDeptText { get; set; }
        public string LoanTypeId { get; set; }
        public string LoanType { get; set; }

        public string Error { get; set; }
        public string ErrorT { get; set; }
        public string ErrorG { get; set; }
        public bool ShowGeneratePDFBtn { get; set; }
        public bool ShouldGeneratePdf { get; set; }
    }
}

母版

<!DOCTYPE html>
<html>
<head>
    <title>@ViewBag.Title</title>
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
    <link href="@Url.Content("~/Content/kendo/2012.2.913/kendo.common.min.css")" rel="stylesheet" type="text/css" />
    <link href="@Url.Content("~/Content/kendo/2012.2.913/kendo.dataviz.min.css")" rel="stylesheet" type="text/css" />
    <link href="@Url.Content("~/Content/kendo/2012.2.913/kendo.blueopal.min.css")" rel="stylesheet" type="text/css" />
    <script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/modernizr-2.5.3.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/kendo/2012.2.913/kendo.all.min.js")"></script>
    <script src="@Url.Content("~/Scripts/kendo/2012.2.913/kendo.aspnetmvc.min.js")"></script>
</head>

<body>
    <div class="page">
        <header>
            <div id="title">
                <h1>BHG :: PDF Service Generator</h1>
            </div>
        </header>
        <section id="main">
            @RenderBody()
        </section>
        <footer>
        </footer>
    </div>
</body>
</html>

查看

@model PDFConverterModel.ViewModels.ViewModelTemplate_Guarantors

@using (Html.BeginForm("ProcessForm", "Home", new AjaxOptions { HttpMethod = "POST" }))
{ 
    <table style="width: 1000px">

        @Html.HiddenFor(x => x.ShouldGeneratePdf)

        <tr>
            <td>
                <img alt="BHG Logo" src="~/Images/logo.gif" />
            </td>
        </tr>
        <tr>
            <td>
                @(Html.Kendo().IntegerTextBox()
                  .Placeholder("Enter Loan Id")
                  .Name("LoanId")
                  .Format("{0:#######}")
                  .Value(Convert.ToInt32(Model.LoanId))
                )
            </td>
        </tr>
        <tr>
            <td>@Html.Label("Loan Type: ")
                @Html.DisplayFor(model => Model.LoanType)
            </td>
            <td>
                <label for="ddlDept">Department:</label>
                @(Html.Kendo().DropDownListFor(model => Model.ddlDept)
                            .Name("ddlDept")
                            .DataTextField("DepartmentName")
                            .DataValueField("DepartmentID")
                            .Events(e => e.Change("Refresh"))
                            .DataSource(source =>
                            {
                                source.Read(read =>
                                {
                                    read.Action("GetDepartments", "Home");
                                });
                            })
                            .Value(Model.ddlDept.ToString())
                    )
            </td>
        </tr>

        @if (Model.ShowGeneratePDFBtn == true)
        {
            if (Model.ErrorT == string.Empty)
            {
            <tr>
                <td>
                    <u><b>@Html.Label("Templates:")</b></u>
                </td>
            </tr>
            <tr>
                @for (int i = 0; i < Model.Templates.Count; i++)
                {  
                    <td>
                        @Html.CheckBoxFor(model => Model.Templates[i].IsChecked)
                        @Html.DisplayFor(model => Model.Templates[i].TemplateId)
                    </td> 
                }

            </tr>
            }
            else
            {
            <tr>
                <td>
                    <b>@Html.DisplayFor(model => Model.ErrorT)</b>
                </td>
            </tr>
            }

            if (Model.ErrorG == string.Empty)
            {
            <tr>
                <td>
                    <u><b>@Html.Label("Guarantors:")</b></u>
                </td>
            </tr>
            <tr>
                @for (int i = 0; i < Model.Guarantors.Count; i++)
                { 
                    <td>
                        @Html.CheckBoxFor(model => Model.Guarantors[i].isChecked)
                        @Html.DisplayFor(model => Model.Guarantors[i].GuarantorFirstName)&nbsp;@Html.DisplayFor(model => Model.Guarantors[i].GuarantorLastName)
                    </td> 
                }

            </tr>
            }
            else
            {
            <tr>
                <td>
                    <b>@Html.DisplayFor(model => Model.ErrorG)</b>
                </td>
            </tr>
            }
        }
        <tr>
            <td>
                <input type="submit" name="submitbutton" id="btnRefresh" value='Refresh' />
            </td>
            @if (Model.ShowGeneratePDFBtn == true)
            {
                <td>
                    <input type="submit" name="submitbutton" id="btnGeneratePDF" value='Generate PDF' />
                </td>
            }
        </tr>
        <tr>
            <td style="color: red; font: bold">
                @Model.Error
            </td>
        </tr>

    </table>
}

<script type="text/javascript">

    $('#btnRefresh').click(function () {
        Refresh();
    });

    function Refresh() {

        var LoanID = $("#LoanID").val();

        if (parseInt(LoanID) != 0) {
            $('#ShouldGeneratePdf').val(false)
            document.forms[0].submit();
        }
        else {
            alert("Please enter a LoanId");
        }
    }

    //$(function () {
    //    //DOM loaded
    //    $('#btnGeneratePDF').click(function () {
    //        DisableGeneratePDF();
    //        $('#ShouldGeneratePdf').val(true)
    //    });
    //});

    //function DisableGeneratePDF() {
    //    $('#btnGeneratePDF').attr("disabled", true);
    //    $('#btnRefresh').attr("disabled", true);
    //}


    $('#btnGeneratePDF').click(function () {
        alert("inside click function");
        DisableGeneratePDF();
        $('#ShouldGeneratePdf').val(true)
        tof = $('#ShouldGeneratePdf').val();
        alert("ShouldGeneratePdf set to " + tof);
    });

    function DisableGeneratePDF() {
        alert("begin DisableGeneratePDF function");
        $('#btnGeneratePDF').attr("disabled", true);
        $('#btnRefresh').attr("disabled", true);
        alert("end DisableGeneratePDF function");
    }

</script>

控制器

[HttpPost]
        public ActionResult ProcessForm(string submitbutton, ViewModelTemplate_Guarantors model, FormCollection collection)

if ((submitbutton == "Refresh") || (submitbutton == null) && (model.ShouldGeneratePdf == false))
            {
}
else if ((submitbutton == "Generate PDF") || (model.ShouldGeneratePdf == true))
            {
}

&#34;提醒&#34;在上面的脚本中出现了他们应该在远程服务器上应该是什么。最后一个警告显示bool变量的值为&#34; true&#34;。但是,当我执行隐藏变量的页面源视图时,下面是结果。

页面加载时和上次提醒按钮完成时隐藏变量的值如下:

我的本地计算机

远程计算机:

正如您所看到的,当进程执行时,我的计算机上的值设置为 true 。但是,在远程计算机上,它设置为 false ,然后它就不会执行。

为什么模型中的值在远程计算机上返回为TRUE?

2 个答案:

答案 0 :(得分:0)

这可能只是一个错字,但行

$('#ShouldGeneratePdf').val(true) 

没有结束;

$('#ShouldGeneratePdf').val(true);

答案 1 :(得分:0)

发现问题是什么......

使用Fiddler,我能够确定网站在FireFox(v16.0.2)下运行正常。我可以看到Fiddler中的值变为true,它将执行正常的过程。

对于最新版本的Chrome,它无效(v23.0.1271.84)。

如果使用IE9,它会在进入站点时自动跳转到Compatability模式。在IE9中,如果正在使用Compatability View,则它不起作用。一旦我从兼容性View改回到IE9,它运行良好。在IE9(IE8和IE7)之前,也没有用。

这些问题如何以及何时可由Microsoft和&amp;谷歌?

在此期间有任何建议可以解决这个问题吗?

我取消选中工具|下的框兼容性查看设置并取消选中“在兼容模式下显示Intranet站点”框。

所以,现在当我进入IE时,它会自动进入常规的IE9模式。

有人知道Chorme的类似设置吗?