MVC .NET表单提交未达到控制器操作

时间:2018-02-08 10:18:40

标签: jquery asp.net-mvc forms

我有一个表单在视图中创建一个对象,如下所示:

@using (Html.BeginForm("Create", "Request", FormMethod.Post, new { id = "createForm" }))
{
    @Html.HiddenFor(model => model.RequestDate)
    @Html.HiddenFor(model => model.Requester)
    <div class="form-horizontal col-md-5">
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            <div class="mui-select">
                @Html.DropDownListFor(model => model.CategoryId, new SelectList(ViewBag.Categories, "Key", "Value"))
                <label>Category</label>
            </div>
            @Html.ValidationMessageFor(model => model.CategoryId, "", new { @class = "text-danger" })
        </div>

        <div class="form-group">
            <div class="mui-textfield mui-textfield--float-label">
                @Html.TextBoxFor(model => model.Requester, new { disable = "disabled", @readonly = "readonly" })
                <label>Requester</label>
            </div>
        </div>

        <div class="form-group">
            <div class="mui-textfield mui-textfield--float-label">
                @Html.TextBoxFor(model => model.RequestDate, new { @id = "txtRequestDate" })
                <label>Request Date</label>
            </div>
        </div>

        <div class="form-group">
            <div class="mui-select">
                @Html.DropDownListFor(model => model.ParentRequestId, new SelectList(ViewBag.Requests, "Key", "Value"))
                <label>Parent Request</label>
            </div>
            @Html.ValidationMessageFor(model => model.ParentRequestId, "", new { @class = "text-danger" })
        </div>

    </div>

    <div class="form-horizontal col-md-5" style="float:right;">
        <div class="form-group">
            <div class="mui-select">
                @Html.EnumDropDownListFor(model => model.Destination, "Select Destination Site...", new { type = "text" })
                <label>Destination Site</label>
            </div>
        </div>

        <div class="form-group">
            <div class="mui-textfield mui-textfield--float-label">
                @Html.TextBoxFor(model => model.ETDDate, new { @id = "txtETDDate" })
                <label>ETD Date</label>
            </div>
        </div>

        <div class="form-group">
            <div class="mui-select">
                @Html.EnumDropDownListFor(model => model.ReasonCode, "Select Reason...", new { type = "text" })
                <label>Reason Code</label>
            </div>
        </div>

        <div class="form-group">
            <div class="mui-textfield mui-textfield--float-label">
                @Html.EditorFor(model => model.Reason, null)
                <label>Reason</label>
            </div>
        </div>

    </div>
}

如您所见,这应该以{{1​​}}作为POST请求。

我在表单外面有一个按钮:

/Request/Create

并通过jquery提交:

<li id="new-menu" class="top-level">
    <a href="#" id="saveBtn">Save</a>
</li>

$('#saveBtn').on('click', function () { $('#createForm').submit(); }); 中的控制器方法是:

RequestController

然而,在这个方法的第一行设置一个断点,并没有给我任何东西,因为它没有达到行动。

我已经在Developer Tools的Network选项卡中检出了调用,并且请求的正文很好,它已经正确地获取了所有细节,因此它匹配了操作所期望的[HttpPost] public async Task<ActionResult> Create(Request request) { //DO STUFF return RedirectToAction("Detail", new { id = request.Id }); } 对象。它还返回Request响应代码,但响应本身没有任何内容。

我不确定如何进一步调试并找到实际问题。

有人有任何建议吗?

非常感谢提前:)

**编辑**

为了澄清,我的回答是浏览器中的空白页面,但显然我知道它没有使用断点击中控制器。

1 个答案:

答案 0 :(得分:0)

好的所以我已经解决了这个问题,并且会在这里发布答案以防其他人:

在我的Request模型中,我有一个名为Value的字段,带有一个getter,如下所示:

[NotMapped]
[DisplayFormat(DataFormatString = "{0:C}", ApplyFormatInEditMode = false)]
public decimal Value
{
    get
    {
        return Lines.Sum(l => l.Value);
     }
}

但是,在创建时,请求没有任何行,因此失败了。

因此,将其更改为以下内容可以通过在某种意义上为其提供默认值来解决问题:

[NotMapped]
[DisplayFormat(DataFormatString = "{0:C}", ApplyFormatInEditMode = false)]
public decimal Value
{
    get
    {
        return Lines != null && Lines.Count() > 0 ? Lines.Sum(l => l.Value) : 0;
    }
}