如何在表单提交期间修改表单字段值?

时间:2014-03-28 12:24:32

标签: c# asp.net

我正在使用ASP.NET表单控件开发表单。其中一个表单字段是出生日期。日期格式为dd / mm / yyyy。我需要做的是实际上,一旦用户提交表单但在数据进入服务器之前将此表单字段转换为mm / dd / yyyy,因为表单数据将要强制使用美国日期格式(mm / dd / yyyy)我无法控制,因此dd / mm / yyyy中的所有日期格式都将被反转,因此它们将是不正确的。所以我需要事先切换它,所以它实际上反转回正确的格式。这是我为了切换价值所写的内容。

string userDOB = Request.Form["txtDOB2"];
DateTime convertedDOB = Convert.ToDateTime(userDOB);
txtDOB2.Text = convertedDOB.ToString("MM/dd/yyyy");

注意:我正在检查以确保出生日期字段不为空或为空等,只是发布与我的问题相关的特定代码。

我通过提交按钮点击操作在代码后面运行它。到目前为止,测试标签只是附加切换日期格式值以确认其工作。但是我不确定如何切换表单值本身,以便最终在实际发布的表单数据中。 Request.Form是只读的,所以我不知道如何将修改日期分配给表单字段值。

另一个潜在的问题是表单操作是在运行表单的域之外的外部源。

3 个答案:

答案 0 :(得分:0)

这就是我攻击它的方式:

<强> FormatDatesModule.cs

public class FormatDatesModule : IHttpModule
{
    private static readonly Regex dateFilter = new Regex(@"^(?<d>\d{2})\/(?<m>\d{2})\/(?<y>\d{4})$", RegexOptions.Compiled);

    public void Init(HttpApplication context)
    {
        context.BeginRequest += (sender,e) => {
            HttpRequest request = ((HttpApplication)sender).Request;

            if (request.QueryString.Count > 0)
            {
                this.FormatDatesInCollection(request.QueryString);
            }

            if (request.HttpMethod == "POST" && request.Form.Count > 0)
            {
                this.FormatDatesInCollection(request.Form);
            }
        };
    }

    private static void FormatDatesInCollection(NameValueCollection parameters)
    {
        // Bypass readonly
        PropertyInfo isReadOnly = parameters.GetType().GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
        isReadOnly.SetValue(parameters, false, null);

        for (var i = 0; i < parameters.Count; i++)
        {
            Match dateMatch = dateFilter.Match(parameters[i]);
            if (dateMatch.Success)
            {
                parameters[i] = String.Join("/", dateMatch.Groups["m"].Value, dateMatch.Groups["d"].Value, dateMatch.Groups["y"].Value);
            }
        }

        isReadOnly.SetValue(parameters, true, null);
    }

    public void Dispose()
    {
    }
}

<强>的web.config

<configuration>
    <system.web>
        <httpModules>
            <add name="FormatDatesModule" type="FormatDatesModule"/>
        </httpModules>
    </system.web>
    <system.webServer> <!-- IIS 7 Integrated Mode -->
        <modules>
            <add name="FormatDatesModule" type="FormatDatesModule"/>
        </modules>
    </system.webServer>
</configuration>

答案 1 :(得分:0)

您可以在按钮点击事件上编写此代码。 例如

    textBox1.Text="31/03/2014"

然后

   Button_click()
   {
        DateTime MyDateTime = new DateTime();
        MyDateTime = DateTime.ParseExact(textBox1.Text, "MM/dd/yyyy", null);
        textBox2.Text = MyDateTime.ToString("dd/MM/yyyy");
   }

或者您可以直接使用

   textBox2.Text=(DateTime.ParseExact(textBox1.Text, "MM/dd/yyyy",null).ToString("dd/MM/yyyy"));

首先,您必须将其转换为DateTime格式,然后再将其转换为字符串。希望对你有所帮助。

答案 2 :(得分:0)

在审核了我决定使用WebRequest的所有内容之后:

http://msdn.microsoft.com/en-us/library/debx8sh9.aspx

由于表单操作是外部URL(不在同一个域中),我得出结论我无法修改表单数据。但是,通过允许表单回发并指定表单操作以及后面的代码中的所有其他内容,我能够指定要发送的DOB值,使用Himanshu的DOB转换方法,我能够在切换DOB时发布表单。 / p>