【问题标题】:asp.net dynamic forms questionasp.net 动态表单问题
【发布时间】:2009-10-06 19:35:17
【问题描述】:

我正在尝试找出一种方法来创建可用于通用表单的页面。我想到的是我们办公室的某个人会使用 obout 编辑来创建看起来像表单的 html。这个 html 将被保存到数据库中。当用户想要填写表单并邮寄时,他们会点击正确的表单检索,然后这个 html 将被放入标签控件中。所以现在页面上有一个标签控件,其中一些 html 作为标签的文本。用户可以输入他们想要的值。所以 html 可能看起来像这样:

<p style="margin: 0px; text-align: center;">
  Quarterly Report of Employees Serverd</p>
<br />
<br />
Employee:&nbsp;&nbsp;&nbsp;
<input type="text" style="width: 300px; height: 22px;" />
<br />
<br />
Address: &nbsp; &nbsp; &nbsp;
<input type="text" style="width: 300px; height: 22px;" />
<br />
<br />
<br />

用户会在 input type="text" 中输入一个值,比如 John Smith,然后也输入地址输入类型。

现在我想获取所有这些 html 并将其邮寄出去。我知道如何做邮寄部分,但我没有得到 html。我可以抓取标签中的 html,但该用户输入的文本不包含在该文本中。那么如何获取该 html 和用户输入的文本。任何想法。

谢谢 香农

【问题讨论】:

    标签: asp.net


    【解决方案1】:
    1. 您需要对 html 进行编码以安全地存储它们。
    2. 使用文字控件而不是标签或文本控件。

    查看link 以获得第一个选项。

    谢谢:)

    你可以使用这样的方式:

    <input id="textField" type="text" runat="server"/>
    

    C# - 代码隐藏

    Mail.Send(textField.Value);
    

    别忘了在 asp.net 的标题部分使用ValidateRequest="false"..

    :)

    【讨论】:

    • 感谢您的回复。我可能会误解你,但我不相信这会有所帮助,因为它仍然不会抓取 Employee 或 Address 输入类型文本中的数据输入。我之前使用过编码,并计划再次使用它,我只是无法让输入文本包含在我所追求的内容中。任何其他想法。
    • 对不起,我误会了你:'(
    【解决方案2】:

    您可以遍历请求项以获取提交的值。如果您想发送一封电子邮件,将输入的值替换为 HTML 输入字段,则必须解析 HTML 表单以找到您的输入字段:

    <input type="text" id="firstName" name="firstName"
             style="width: 300px; height: 22px;" />
    

    然后替换成

    Request.Form["firstName"]
    

    请注意,输入字段将需要标识符,以便您可以从 HTTP 请求中检索它们。

    希望这会有所帮助!

    【讨论】:

      【解决方案3】:

      一方面,您确实希望在 html 中获得更多信息 - 至少表单元素上的一些 name 属性:

      Employee: <input type="text" name="employee" />
      

      这样,您可以创建一个像这样的 aspx 页面:

      <%@ Page language="C#" 
               autoeventwireup="true" 
               codebehind="DynamicForm.aspx.cs" 
               inherits="TempWebApp.DynamicForm" %>
      <html xmlns="http://www.w3.org/1999/xhtml">
        <head runat="server">
          <title></title>
        </head>
        <body>
          <form id="form1" runat="server">
            <div>
              <asp:Literal id="m_HtmlForm" runat="server"></asp:Literal>
              <asp:Button id="m_SubmitForm" 
                          onclick="SubmitForm_OnClick" 
                          runat="server" 
                          text="Submit" />
            </div>
          </form>
        </body>
      </html>
      

      然后在您的代码中,您将数据库中的 html 读入文字控件的.Text

      using System;
      using System.Web.UI;
      
      namespace TempWebApp
      {
        public partial class DynamicForm : Page
        {
          protected void Page_Load(object sender, EventArgs e)
          {
            m_HtmlForm.Text = getFormData();
          }
      
          protected void SubmitForm_OnClick(object sender, EventArgs e)
          {
            // Just showing we've picked up the form data.
            // You'll also see ViewState and others in here.
            foreach (string key in Request.Form.AllKeys)
            {
              m_HtmlForm.Text += string.Format("<br />Key: <b>{0}</b><br />Value:<br />{1}<br />", key, Request.Form[key]);
            }
          }
      
          private string getFormData()
          {
            // Excluded for brevity
          }
        }
      }
      

      显然,在您的按钮/回发处理程序中,您需要确保您拥有来自数据库的原始 HTML,然后修改输入元素以使用值向它们添加文本属性,或者更有可能替换它们使用实际值 - 否则,如果您的用户开始使用单选按钮、复选框、选择列表等保存表单,您将不得不对表单进行大量额外的解析。

      【讨论】:

      • 感谢您的帮助.. 这对您有很大帮助。我会用向上标记它,但我还没有足够的积分。再次谢谢你。香农
      • 没有问题 - 你现在应该可以投票了,你也可以随时接受答案;)
      猜你喜欢
      • 2017-01-11
      • 2012-06-21
      • 1970-01-01
      • 2011-09-07
      • 2019-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多