1

コントローラーに戻るときにプロセスを実行するために、値をTRUEに設定することになっているブールモデル変数があります。

ローカル マシンでは問題なく動作しますが、リモート Web サーバーでは動作しません。

誰かが私に欠けているものを教えてもらえますか? 以下は「プディングの証明」です。問題のブール値は「ShouldGeneratePdf」です。

モデル:

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))
            {
}

上記のスクリプトの「アラート」は、リモート サーバー上で正確に表示されます。最後のアラートは、bool 変数の値が「true」であることを示しています。ただし、隠し変数のページ ソース ビューを実行すると、以下の結果が得られます。

ページがロードされたとき、および最後のアラート ボタンが終了したときの隠し変数の値は次のとおりです。

私のローカルマシン:

リモート マシン:

ご覧のとおり、プロセスが実行されると、私のマシンの値はtrueに設定されます。ただし、リモート マシンではfalseに設定され、実行されません。

モデルの値がリモート マシンで TRUE として返されないのはなぜですか?

4

2 に答える 2

0

これはタイプミスかもしれませんが、

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

終わりがありません。

$('#ShouldGeneratePdf').val(true);
于 2012-11-09T04:56:45.070 に答える
0

問題が何であるかを見つけました....

Fiddler を使用して、Web サイトが FireFox (v16.0.2) で問題なく動作することを確認できました。Fiddler で値が true に変更され、通常のプロセスが実行されることがわかりました。

最新バージョンの Chrome では動作しませんでした (v23.0.1271.84)。

IE9 を使用している場合、サイトに移動すると自動的に互換モードにジャンプします。IE9 では、Compatability View を使用している場合、動作しません。互換性ビューから IE9 に戻すと、問題なく動作しました。IE9 (IE8 & IE7) より前のバージョンでも動作しませんでした。

Microsoft と Google は、これらの問題をいつ、どのように修正できますか?

それまでの間、これを回避するための提案はありますか?

ツールの下にあるボックスのチェックを外しました | 互換性設定を表示し、「互換性モードでイントラネット サイトを表示する」というボックスのチェックを外します。

そのため、IE を起動すると、自動的に通常の IE9 モードになります。

Chormeに似た設定を知っている人はいますか?

于 2012-11-09T15:20:00.533 に答える