在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表之前验证数据。答案 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 %>
部分中,您可以将TagPrefix
和TagName
放在任何您想要的任何内容上,只需确保它们在您使用控件时匹配。
答案 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);
希望这会有所帮助。