You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HTML时间表单序列化与格式验证问题求助(C#后端)

解决方案

一、先修复核心代码错误

你提交代码里的表单选择器写错了:$("editForm") 应该是 $("#editForm")(缺少ID选择器的#),这是控制台输出为空的直接原因。另外别忘了阻止表单默认提交行为,否则Ajax请求会被页面刷新中断。修正后的提交代码:

$("#editForm").on("submit", function(event) {
    event.preventDefault();
    console.log($("#editForm").serializeObject());
    $.ajax({
        url: "/Items/SaveItem/",
        type: "POST",
        data: $("#editForm").serializeObject(),
        success: function(data) {
            if (data.message == "OK") {
                success("Item has been successfully saved!");
            }
        }
    });
});

二、强制HH:MM格式输入的两种可行方案

方案1:使用原生input type="time"控件

原生时间控件本身就会限制用户输入HH:MM格式,且能被jQuery序列化方法正常识别,之前的问题大概率是配置或选择器错误。调整后的表单代码:

<form id="editForm">
  <table>
    <tr>
      <th>From Time: </th>
      <td style="background-color:white;">       
        <input type="time" id="FROMTIME" name="FROMTIME" value="@Model.FROMTIME" 
               asp-for="FROMTIME" required step="60" form="editForm" />
      </td>
    </tr>
    <tr>
      <th>To Time: </th>
      <td style="background-color:white;">
        <input type="time" id="TOTIME" name="TOTIME" value="@Model.TOTIME" 
               asp-for="TOTIME" required step="60" form="editForm" />
      </td>
    </tr>
  </table>
</form>
  • step="60":确保控件只允许选择整分钟,严格匹配HH:MM格式
  • 后端直接用TimeSpan类型接收即可,ASP.NET会自动完成参数绑定

方案2:文本输入框+正则验证

如果坚持用文本输入框,通过HTML原生属性和JS辅助来约束格式:

<form id="editForm">
  <table>
    <tr>
      <th>From Time: </th>
      <td style="background-color:white;">       
        <input type="text" id="FROMTIME" placeholder="HH:MM" name="FROMTIME" 
               value="@Model.FROMTIME" asp-for="FROMTIME" required 
               pattern="^([01]\d|2[0-3]):([0-5]\d)$" title="请输入HH:MM格式的时间" form="editForm" />
      </td>
    </tr>
    <tr>
      <th>To Time: </th>
      <td style="background-color:white;">
        <input type="text" id="TOTIME" placeholder="HH:MM" name="TOTIME" 
               value="@Model.TOTIME" asp-for="TOTIME" required 
               pattern="^([01]\d|2[0-3]):([0-5]\d)$" title="请输入HH:MM格式的时间" form="editForm" />
      </td>
    </tr>
  </table>
</form>
  • pattern属性:用正则^([01]\d|2[0-3]):([0-5]\d)$强制验证小时(00-23)和分钟(00-59)的格式
  • 可选JS辅助限制输入(防止非法字符):
$("#FROMTIME, #TOTIME").on("input", function() {
    // 只保留数字和冒号
    this.value = this.value.replace(/[^0-9:]/g, '');
    // 输入到第2位时自动添加冒号
    if (this.value.length === 2 && !this.value.includes(':')) {
        this.value += ':';
    }
});

三、确保serializeObject方法可用

jQuery本身没有原生的serializeObject方法,需要自己实现:

$.fn.serializeObject = function() {
    var obj = {};
    var arr = this.serializeArray();
    $.each(arr, function() {
        if (obj[this.name]) {
            if (!obj[this.name].push) {
                obj[this.name] = [obj[this.name]];
            }
            obj[this.name].push(this.value || '');
        } else {
            obj[this.name] = this.value || '';
        }
    });
    return obj;
};

嫌麻烦的话也可以直接用jQuery原生的serialize()方法,它会生成URL编码的字符串,后端同样能正常接收:

data: $("#editForm").serialize(),

内容的提问来源于stack exchange,提问作者TechQuestion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 02:50:15