隐藏字段没有发送给服务

本文关键字:服务 字段 隐藏 | 更新日期: 2023-09-27 18:05:22

我有一个ASP。. NET MVC 4网页,我使用以下HTML代码为最终用户生成一个表单:

@using (Html.BeginForm("JEdit", "Post", FormMethod.Post, new { id = "frmEditPost" }))
{
    <div id="postListEditor" class="regularContainer" style="position:relative;">
        @Html.ValidationSummary(false)
        @Html.HiddenFor(c=> c.Id, false)
        <div class="floatLeft">
            @Html.LabelFor(c => c.Title, true)
            @Html.TextBoxFor(c => c.Title, new { @class = "tb1", @Style = "width:400px;" })
            @Html.ValidationMessageFor(model => model.Title)
        </div>
        <br style="clear:both;" />
        <div class="floatLeft">
            @Html.LabelFor(c => c.Text, true)
            @Html.TextAreaFor(c => c.Text, new { @class = "tb1", @Style = "width:400px; height:200px" })
            @Html.ValidationMessageFor(model => model.Text)
        </div>
        <div style="clear:both;"></div>
        @Html.Raw(@Html.SubmitButton("Posta", "btPost", "", "", "ValidateFormAndAjaxSubmit('frmEditPost', this);"))
    </div>
}

当点击提交按钮时,将运行以下javascript:

function ValidateFormAndAjaxSubmit(formId, callingElement) {
    if (IsNotDblClick(callingElement.id)) {
        var _form = $("#" + formId);
        var validator = _form.validate();
        var anyError = false;
        anyError = !_form.valid();
        if (anyError) {
            window.latestClick = '';
            return false; // exit if any error found    
        }
        $.post(_form.attr("action"), _form.serialize(), function (data) {
            if (data.success && data.redirectUrl.length > 0) {
                window.location.href = data.redirectUrl;
            }
            else {
                var isValid = validateResponse(_form, data);
                window.latestClick = '';
            }
        })
    }
}

问题是,hiddenFor永远不会被发送回来,但所有其他成员?我可以看到在生成的HTML中,hit字段是这样设置的:

<input data-val="true" data-val-number="The field Int32 must be a number." data-val-required="The Int32 field is required." id="Id" name="Id" type="hidden" value="21">

那么为什么这个hittenField没有被发送回服务呢?

Edit1: 这是根据dev在Chrome

发送的
Request URL:http://localhost:5215/Post/JEdit
Request Headersview source
Accept:*/*
Content-Type:application/x-www-form-urlencoded
Origin:http://localhost:5215
Referer:http://localhost:5215/Post/Edit/42
User-Agent:Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.172 Safari/537.22
X-Requested-With:XMLHttpRequest
Form Dataview sourceview URL encoded
Id:42
Title:testar3532
Text:testas3532
Url:http://test.se
Tags:

Edti2:

ViewModel是这样的:

public class EditPostViewModel
    {
        public int Id = -1;
        public EditPostViewModel() { }
        public EditPostViewModel(string title, string text, string url)
        {
            Title = title;
            Text = text;
            Url = url;
        }
        [Display(Name = "Titel"/*Description = "..."*/)]
        [StringLength(100, MinimumLength = 3, ErrorMessage = "...")]
        [Required(ErrorMessage="...")]
        public string Title { get; set; }
        [Display(Name = "Text")]
        [StringLength(2500, MinimumLength = 3, ErrorMessage = "...")]
        public string Text { get; set; }
        [StringLength(100, MinimumLength = 3, ErrorMessage = "...")]
        [Display(Name = "Länk")]
        [RegularExpression(@"^(http(s)?://(['w-]+.)+['w-]+(/['w- ./?%&=])?)?$", ErrorMessage="...")]
        public string Url { get; set; }
        [Display(Name = "Tags")]
        [TagAttribute(ErrorMessage="...a")]
        public string Tags { get; set; }
        public List<int> TagIdList { get; set; }
        public string CustomError { get; set; }
    }

隐藏字段没有发送给服务

默认情况下。NET MVC不能绑定到字段。只有属性。因此,将Id成员更改为属性

试试@Html。HiddenFor(c => c. id, new {Value = Model。div Id})