簡體   English   中英

C# MVC Ajax 模式驗證 - 500 內部服務器錯誤

[英]C# MVC Ajax modal validation - 500 internal server error

我不確定為什么這不起作用,我在項目的不同部分有完全相同的東西,我收到“POST”500(內部服務器錯誤)我只是想得到 @using (Ajax. BeginForm( Validation to work on a modal. 就像我說的,我有這個確切的東西在項目的不同部分工作並且它工作。我的模態成功填充但是當我點擊提交按鈕時我得到了上面的錯誤。在我看來我擁有的模態和控制

HtmlHelper.UnobtrusiveJavaScriptEnabled = true;

我的代碼中有所有這些庫。

這是腳本部分

<script src="/Scripts/jquery-3.3.1.js"></script>
<script src="/Scripts/jquery-ui-1.12.1.js"></script>
<script src="/Scripts/jquery.unobtrusive-ajax.js"></script>
<script src="/Scripts/jquery.validate.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.js"></script>
<script src="/Scripts/bootstrap.js"></script>
<script src="/Scripts/respond.js"></script>

@using (Ajax.BeginForm("PartNumberUpdate", "Parts", new AjaxOptions() { HttpMethod = "POST", UpdateTargetId = "PartNumControls", OnSuccess = "ajaxPartUpdate" }))
{
    <div class="modal" id="modalPNUpdate" tabindex="-1" role="dialog" aria-labelledby="lblPNUpdate" aria-hidden="true">
        <div class="modal-dialog" role="document">
            <div class="modal-content">
                <div class="modal-header">
                    <h3 class="modal-title">Part Number Details</h3>
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                        <span aria-hidden="true">&times;</span>
                    </button>
                </div>
                <div class="modal-body" id="PartNumControls">
                    @Html.Partial("PNControls")
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>
                    <input type="submit" class="btn btn-primary" value="Save" />
                </div>
            </div>
        </div>
    </div>
}

這是控制器代碼

        [HttpPost]
        [ValidateAntiForgeryToken]
        [HandleError]
        public ActionResult PartNumberUpdate(FindPartModel model)
        {
            if (ModelState.IsValid)
            {
                var partNumber = context.PartNumbers.Where(x => x.PartNumber1 == model.PartVM.PartNumber).FirstOrDefault();
                partNumber.PartNumber1 = model.PartVM.PartNumber;

                /// UPDATE PartNumber Record
                context.Entry(partNumber).State = EntityState.Modified;
                context.SaveChanges();
                string returnStr = "refresh";
                ModelState.Clear();
                return Json(returnStr);
            }
            return PartialView("PNControls", model);
        }

        public ActionResult PNControls()
        {
            return View(new FindPartModel());
        } 

添加 - 這是部分視圖“PNControls”

@model Messer_PartNumbers.Models.FindPartModel
@{ 
    HtmlHelper.UnobtrusiveJavaScriptEnabled = true;
}

@Html.AntiForgeryToken()

<span class="alert-danger">
    @Html.ValidationSummary(true, "", new { @class="text-danger" })
</span>

@Html.HiddenFor(x => x.PartVM.PartID)
@Html.HiddenFor(x => x.PartVM.PartGroup)
@Html.HiddenFor(x => x.PartVM.GlobalPart)
@Html.HiddenFor(x => x.PartVM.Released)

<div class="form-group">
    @Html.LabelFor(x =>x.PartVM.PartNumber, htmlAttributes: new { @class="control-label col-3" })
    <div class="col-9">
        @Html.TextBoxFor(x => x.PartVM.PartNumber, new { @class="form-control", @readonly="readonly" })
        @Html.ValidationMessageFor(x => x.PartVM.PartNumber, "", new { @class="text-danger" })
    </div>
</div>
<div class="form-group">
    @Html.LabelFor(x => x.PartVM.EnteredBy, htmlAttributes: new { @class = "control-label col-3" })
    <div class="col-9">
        @*@Html.TextBoxFor(x => x.PartVM.EnteredBy, new { @class="form-control" })*@
        @Html.DropDownListFor(x=>x.PartVM.EnteredBy, Model.PNEnteredByOptions, new { @class="form-control"})
        @Html.ValidationMessageFor(x => x.PartVM.EnteredBy, "", new { @class = "text-danger" })
    </div>
</div>
<div class="form-group">
    @Html.LabelFor(x => x.PartVM.DateEntered, htmlAttributes: new { @class = "control-label col-3" })
    <div class="col-9">
        @Html.TextBoxFor(x => x.PartVM.DateEntered, new { @class = "form-control", @readonly = "readonly" })
        @Html.ValidationMessageFor(x => x.PartVM.DateEntered, "", new { @class = "text-danger" })
    </div>
</div>
<div class="form-group">
    @Html.LabelFor(x => x.PartVM.MachineTypes, htmlAttributes: new { @class = "control-label col-3" })
    <small>Hold Ctrl to select multiples</small>
    <div class="col-9">
        @*@Html.TextBoxFor(x => x.PartVM.MachineTypes, new { @class = "form-control" })*@
        @Html.ListBoxFor(x => x.PartVM.MachineTypes, Model.PNMachineTypeOptions, new { @class = "form-control", @size = 5, @style = "overflow:scroll;" })
        @Html.ValidationMessageFor(x => x.PartVM.MachineTypes, "", new { @class = "text-danger" })
    </div>
</div>

<div class="form-group">
    @Html.LabelFor(x => x.PartVM.Description, htmlAttributes: new { @class="control-label col-3" })
    <div class="col-9">
        @Html.TextBoxFor(x => x.PartVM.Description, new { @class="form-control" })
        @Html.ValidationMessageFor(x => x.PartVM.Description, "", new { @class="text-danger" })
    </div>
</div>

我發現了我的錯誤。

這是對我的模型的自定義驗證。 正在使用其他模型。

謝謝@! 我最終通過使用網絡選項卡並在“全部”中查看堆棧跟蹤找出更詳細的錯誤來解決這個問題。 這篇文章讓我有了在開發人員工具網絡選項卡中使用堆棧跟蹤的想法。 ASP.NET MVC 中的 500 內部服務器錯誤

    [HttpPost]
    [ValidateAntiForgeryToken]
    [HandleError]
    public ActionResult PartNumberUpdate(FindPartModel model){/*skip*/}

您在操作之上添加了[ValidateAntiForgeryToken]

但是您的視圖中沒有@Html.AntiForgeryToken()

@using (Ajax.BeginForm("PartNumberUpdate", "Parts", new AjaxOptions() { HttpMethod = "POST", UpdateTargetId = "PartNumControls", OnSuccess = "ajaxPartUpdate" })){
    @Html.AntiForgeryToken() //Add me
    //skip
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM