【问题标题】:can't retrieve data from post in controller in ASP.Net Mvc无法从 ASP.Net Mvc 控制器中的帖子中检索数据
【发布时间】:2023-04-05 04:34:01
【问题描述】:

我的 ASP.Net 视图中有两个表单,

@using (Html.BeginForm("saveData", "Home", FormMethod.Post, new { id = "validate" }))
{
<div class="formular-container">
                <div class="row">
                    <div class="col-md-3">
                        @Html.LabelFor(x => x.ccBesucherFirma)
                    </div>
                    <div class="col-md-7">
                        @Html.TextBoxFor(x => x.ccBesucherFirma, new { @class = "form-control firma" })
                        @Html.ValidationMessageFor(x => x.ccBesucherFirma)
                    </div>
                </div>
                <div class="row">
                    <div class="col-md-3">
                        @Html.LabelFor(x => x.ccBesucherName)
                    </div>

                    <div class="col-md-7">
                        @Html.TextBoxFor(x => x.ccBesucherName, new { @class = "form-control name" })
                        @Html.ValidationMessageFor(x => x.ccBesucherName)
                    </div>
                </div>
                <div class="row">
                    <div class="col-md-3">
                        @Html.LabelFor(x => x.ccBesucherDatum)
                    </div>
                    <div class="col-md-7">
                        @Html.TextBoxFor(x => x.ccBesucherDatum, new { @class = "form-control datum", ID = "datepicker", placeholder = "" })
                        @Html.ValidationMessageFor(x => x.ccBesucherDatum)
                    </div>
                </div>
                <div class="row">
                    <div class="col-md-3">
                        @Html.LabelFor(x => x.ccAnsprechpartnerTurck)
                    </div>
                    <div class="col-md-7">
                        @Html.TextBoxFor(x => x.ccAnsprechpartnerTurck, new { @class = "form-control contact" })
                        @Html.ValidationMessageFor(x => x.ccAnsprechpartnerTurck)
                    </div>
                </div>

                <button class="btn btn-default" id="entry" type="submit">Eintragen</button>
            </div>
        }

    @using (Html.BeginForm("editData", "Home", FormMethod.Post, new { id = "validate" }))
    {
        <div id="overlay">
            <div id="overlay-container">
                <table class="overlay-table">
                    <tr>
                        <td>@Html.LabelFor(x => x.ccBesucherFirma)</td>
                        <td>@Html.TextBoxFor(x => x.ccBesucherFirma, new { @class = "form-control overlay-input firma", disabled = "" })</td>
                    </tr>
                    <tr>
                        <td>@Html.LabelFor(x => x.ccBesucherName)</td>
                        <td>@Html.TextBoxFor(x => x.ccBesucherName, new { @class = "form-control overlay-input name", disabled = "" })</td>
                    </tr>
                    <tr>
                        <td>@Html.LabelFor(x => x.ccBesucherDatum)</td>
                        <td>@Html.TextBoxFor(x => x.ccBesucherDatum, new { @class = "form-control overlay-input datum", id = "datepicker", disabled = "" })</td>
                    </tr>
                    <tr>
                        <td>@Html.LabelFor(x => x.ccAnsprechpartnerTurck)</td>
                        <td>@Html.TextBoxFor(x => x.ccAnsprechpartnerTurck, new { @class = "form-control overlay-input contact", disabled = "" })</td>
                    </tr>
                </table>
                <div id="EditResult"></div>

                <button class="btn btn-default overlay-button" type="button" id="print">Ausweis Drucken</button>
                <button class="btn btn-default overlay-button" type="button" id="edit">Bearbeiten</button>
                <button class="btn btn-default close-overlay overlay-button" type="reset" value="xModel">Schließen</button>
            </div>
        </div>
    }

一个用于将数据保存到数据库,另一个用于编辑数据中的错误。我读到可以使用两种形式,没有问题,所以我只是把另一种形式放在我的视野中,并希望最好。 现在我的问题是,第二种形式不会将任何数据发布到我的控制器。 为此,我尝试了很多方法,但都没有成功。 这是我的尝试:

首先,我尝试使用您在我的视图中看到的表格。我需要在表单中提及一些内容,我正在使用 jquery 编辑编辑按钮,以便它获取属性type="submit"因为我不想删除和创建按钮。

在带有 ajax 的 Javascript/Jquery 中:

        var firma = $(".firma").val();
        var name = $(".name").val();
        var datum = $(".datum").val();
        var contact = $(".contact").val();
        var formData = [firma,name,datum,contact];

        $.ajax({
            url: "/Home/editData",
            type: "POST",
            dataType: "json",
            data: JSON.stringify(formData),
            success: function(myData) {
                $("#EditResult").html(myData);
            }
        });

最后是我的控制器,数据应该在哪里结束:

[HttpPost]
public ActionResult editData(BesucherausweisModel xFormData)
{

    var a = xFormData;

    return View("Index");
}

编辑: 这是课程:

[Required]
[Display(Name = "Firma")]
public string ccBesucherFirma { get; set; }
[Required]
[Display(Name = "Name")]
public string ccBesucherName { get; set; }
[Required]
[Display(Name = "Datum")]
public string ccBesucherDatum { get; set; }
[Required]
[Display(Name = "Ansprechpartner")]
public string ccAnsprechpartnerTurck { get; set; }

谁能告诉我这里做错了什么?

编辑:好的,我的导师告诉我不要再从事这个项目了,我仍然感谢你的帮助。

【问题讨论】:

  • 这两种形式有什么意义——它们都包含相同属性的控件——你的saveData()editDate()方法有什么区别?而且您的 html 无效,因为两个 &lt;form&gt; 标签具有相同的 id 属性,并且每个控件都有一个重复的 id 属性。该脚本只会获取第一种形式的控件的值
  • 然后var formData = [firma,name,datum,contact];生成一个不会绑定到参数BesucherausweisModel xFormData的数组
  • 我没有注意到相同的Id,但我用不同的ID对其进行了测试并将参数更改为string[]但我仍然没有得到任何数据
  • 当然不是,但你实际上想用这个做什么。对于完全相同的数据,这两种形式的意义何在。你的 editData() 方法实际上做了什么(这不可能是真正的代码,因为它完全什么都不做)
  • 第一种形式将数据保存到数据库中而不进行编辑,第二种形式是在数据出现错误时编辑所述数据。我想拆分我的函数以清晰地查看我的代码并准确了解错误出现的位置。

标签: javascript c# jquery asp.net-mvc razor


【解决方案1】:

我相信您的序列化会遗漏属性名称。为您的表单添加唯一 ID,然后尝试以下操作:

$.ajax({
        url: "/Home/editData",
        type: "POST",
        dataType: "json",
        data: $('#some-unique-id').serialize(),
        success: function(myData) {
            $("#EditResult").html(myData);
        }
    });

【讨论】:

  • 请注意,有两个表单元素具有相同的id,因此您的#validate 选择器只会从第一个表单中获取元素。
【解决方案2】:

您好,您的方向是正确的,只需要在 ajax 调用中进行一些更正。 找到以下代码:

步骤 1) 确认您的 BesucherausweisModel 具有以下属性的公共属性:

class BesucherausweisModel
{
    public string Firma {get; set;}
    public string Name {get; set;}
    public string Datum {get; set;}
    public string Ansprechpartner {get; set;}
}

第 2 步)通过 ajax 调用传递数据,如下所示:

var xFormData = {};
xFormData.Firma = $(".firma").val();
xFormData.Name = $(".name").val();
xFormData.Datum = $(".datum").val();
xFormData.Ansprechpartner = $(".contact").val();

$.ajax({
    url: "/Home/editData",
    type: "POST",
    dataType: "json",
    contentType: "application/json",
    data: JSON.stringify(xFormData),
    success: function(myData) {
        $("#EditResult").html(myData);
    }
});

请告诉我,这对你有用吗?

【讨论】:

  • 所以,我试过了,但它仍然返回null我的控制器
  • 请在此处发布您的 BesucherausweisModel 课程代码
  • 试试这个。根据您更新的问题,我已经更新了答案。
  • 仍然返回 null :/
  • 添加警报(xFormData);在 ajax 调用之前,请让我知道 xFormData 是否有数据?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-07
  • 1970-01-01
  • 2019-02-20
  • 2015-03-08
  • 1970-01-01
  • 2013-11-10
  • 2023-03-14
相关资源
最近更新 更多