多个页面上的重复性任务?

时间:2013-05-13 17:21:36

标签: c# asp.net winforms

在Intranet网站上使用C#和ASP.NET。我有多个“管理”页面,我正在检查字段以确保日期存在,检查字段以确保用户名存在并填写这些字段(如果它们留空)。在所有这些页面上,存在具有相同名称的字段。我在代码隐藏中使用的代码块如下:

        //If the User fields are empty, set them to the current user
        string ActiveUser = System.Web.HttpContext.Current.User.Identity.Name;
        string LoginID = ActiveUser.Right(6);

        var txtLoadedBy_chk = string.IsNullOrEmpty(str5);
        if ((txtLoadedBy_chk == true))
        {
            str5 = LoginID;
        }
        var txtUpdatedBy_chk = string.IsNullOrEmpty(str7);
        if ((txtUpdatedBy_chk == true))
        {
            str7 = LoginID;
        }
        var txtFlgUpdatedBy_chk = string.IsNullOrEmpty(str9);
        if ((txtFlgUpdatedBy_chk == true))
        {
            str9 = LoginID;
        }

        // If the date fields are NULL, set them to today's date
        var txtLoadedOn_chk2 = string.IsNullOrEmpty(str6);
        if ((txtLoadedOn_chk2 == true))
        {
            str6 = DateTime.Today.ToString();
        }
        var txtUpdatedOn_chk2 = string.IsNullOrEmpty(str8);
        if ((txtUpdatedOn_chk2 == true))
        {
            str8 = DateTime.Today.ToString();
        }
        var txtFlgUpdatedOn_chk2 = string.IsNullOrEmpty(str10);
        if ((txtFlgUpdatedOn_chk2 == true))
        {
            str10 = DateTime.Today.ToString();
        }

        // Check to make sure the dates entered are valid.  If not, let the user know and
        //   then exit out of the code so the record is not saved
        var txtLoadedOn_chk = DateTimeHelpers.IsValidSqlDateTimeNative(str6);
        var txtUpdatedOn_chk = DateTimeHelpers.IsValidSqlDateTimeNative(str8);
        var txtFlgUpdatedOn_chk = DateTimeHelpers.IsValidSqlDateTimeNative(str10);

        if ((txtLoadedOn_chk == false) || (txtUpdatedOn_chk == false) || (txtFlgUpdatedOn_chk == false))
        {
            Page.ClientScript.RegisterStartupScript(this.GetType(), "ch", "<script>alert('WARNING !! One of your date fields is invalid')</script>");
            return;
        }

我在想,既然我对所有这些表单进行了相同的检查,我应该可以将这段代码放在某处并引用它,而不是将其放在每种形式中。我该怎么做呢?如果我将它放在一个单独的页面或CS文件中,它将如何知道哪个表单正在调用它,以便它读取正确的字段?如果您可以提供一些示例代码,那将是一个巨大的帮助。 TIA!

哦,DateTimeHelpers是我创建的一个类,以防你想知道。

编辑:我只是想明确一些事情;此代码位于代码隐藏中,并在用户按下“保存”按钮时调用。它只是在尝试将数据写入SQL Server表之前验证数据。

2 个答案:

答案 0 :(得分:2)

您要在此处执行的操作是创建用户控件。您可以使用Visual Studio提供的“新文件”内容将其中一个添加到项目中。我将在此答案中调用该用户控件Fields.ascx

您的答案中的代码位于该用户控件(Fields.ascx.cs)的代码隐藏中。您在每个页面上的表单元素都在Fields.ascx中。

执行此操作后,您可以在页面顶部引用用户控件,如下所示:

<%@ Register TagPrefix="user2174085" TagName="MyFields" Src="~/Path/To/Fields.ascx" %>

然后使用以下代码在正确的位置将字段添加到页面中:

<user2174085:MyFields runat="server" />

<%@ Register %>部分中,您可以将TagPrefixTagName放在任何您想要的任何内容上,只需确保它们在您使用控件时匹配。

答案 1 :(得分:1)

您总是可以在cs文件中编写公共方法,并将控件作为引用变量传递。以下是一个简单的示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI.WebControls;

namespace mol_intranet
{
    public class ClassTesting
    {

        //pass the fields to be checked/updated here as ref variables
        public void checkFields(ref TextBox loadedby, ref TextBox updatedby)
        {

            string ActiveUser = System.Web.HttpContext.Current.User.Identity.Name;
            string LoginID = ActiveUser.Right(6);

            var txtLoadedBy_chk = string.IsNullOrEmpty(loadedby.Text);
            if ((txtLoadedBy_chk == true))
            {
                loadedby.Text = LoginID;
            }

            var txtUpdatedBy_chk = string.IsNullOrEmpty(updatedby.Text);
            if ((txtUpdatedBy_chk == true))
            {
                updatedby.Text = LoginID;
            }

        }
    }
}

然后只需在代码中调用方法并传递控件:

    ClassTesting t = new ClassTesting();
    t.checkFields(txtLoadedBy, txtUpdatedBy);

希望这会有所帮助。