コントローラーに戻るときにプロセスを実行するために、値を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) @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 として返されないのはなぜですか?