【问题标题】:Form Post Values using plain html controls in ASP.NET web forms在 ASP.NET Web 表单中使用纯 html 控件表单发布值
【发布时间】:2010-09-30 22:54:18
【问题描述】:

我有一个简单的表单,其中包含一些普通的 html 输入,例如使用 ASP.NET Web 表单(不是 MVC)的波纹管

<table id="tbl_SchoolDetails">
    <tbody id="tbody_SchoolDetails">
        <tr>
            <td>
            School Name
        </td>
        <td>
            <input id="SchoolDetails_SchoolName" type="text" value="<%= ViewModel.School.Name %>" />
        </td>
    </tr>
    <tr>
        <td>
            Head Teacher
        </td>
        <td>
            <input id="SchoolDetails_HeadTeacher_Name" type="text" value="<%= ViewModel.School.HeadTeacher.Name %>" />
        </td>
    </tr>
    <tr>
        <td>
            Head Teacher Email
        </td>
        <td>
            <input id="SchoolDetails_HeadTeacher_Email" type="text" value="<%= ViewModel.School.HeadTeacher.Email %>" />
        </td>
    </tr>
    <tr>
        <td>
            Regent/Placement Contact
        </td>
        <td>
            <input id="SchoolDetails_Regent_Name" type="text" value="<%= ViewModel.School.Regent.Name %>" />
        </td>
    </tr>
</tbody>
</table>

当我发回服务器时,文本框的值不包含在 Request.Form 元素中。我想念这个有什么原因吗?我不愿意使用 asp.net 控件,因为该页面稍后将需要大量的 javascript 来更改 ui 和其他内容。

我知道我可以使用 MVC 轻松做到这一点,但不幸的是,目前无法对此进行更改。

干杯 科林·G

【问题讨论】:

  • 这个 html 在
    元素中,是吗?
  • 您知道 Request.Form 是浏览器在请求中发送的名称/值对的集合。唯一在 form.submit() 完成时发送它们,或者通过 javascript(比如 asp.net 控件回发),或者按下提交按钮?

标签: asp.net html webforms


【解决方案1】:

为输入提供一个 id 和一个名称,看看这是否不能解决您的问题。

<input id="SchoolDetails_SchoolName"
       name="SchoolDetails_SchoolName"
       type="text"
       value="<%= ViewModel.School.Name %>" />

id 属性仅标识 DOM 中的标记。 name property 允许将标签作为表单的一部分回发。 ASP.NET 控件或带有runat=server 的 HTML 元素会自动获取分配的 name 和 id 属性。

【讨论】:

    【解决方案2】:

    HTML 元素不是 ASP.NET 生命周期的一部分。一个简单的开始方法是将 runat="server" 属性添加到您的 INPUT 元素。

    【讨论】:

    • 它会解决它,但不是因为 ASP.NET 生命周期的问题。问题是输入没有名称,因此客户端永远不会使用表单提交。
    • 元素将使其进入 Request.Form 而不管 runat="server"。他们只需要被命名(即 name="..." 而不是只有 id="..." 发布)。
    【解决方案3】:

    @tvanfosson 干杯,正如我所愿。

    @Bullins 我真的不想使用 runat="server" 因为它会导致控件的 ID 最终像 ctl00_ContentPlaceHolder1_ctl00_SchoolDetails_Address_Postcode 这使得我很难实现我想要的。

    【讨论】:

      【解决方案4】:

      @Colin 使用ClientIDMode="Static" 属性,您的服务器端元素名称将在客户端保持不变,即使您在元素上有 runat="server" 也是如此。希望这会有所帮助

      【讨论】:

        猜你喜欢
        • 2011-03-17
        • 2010-11-06
        • 1970-01-01
        • 1970-01-01
        • 2015-08-12
        • 2011-05-23
        • 2017-01-22
        • 2017-08-04
        • 1970-01-01
        相关资源
        最近更新 更多