【发布时间】:2011-05-26 19:00:14
【问题描述】:
我正在使用 asp.net 动态数据。我想为用户自动填写一个字段。该文件为用户名,可通过集成windows认证获取。
我创建了一个字段模板,它在插入模式下工作,但在更新模式下,一旦另一个用户更新了记录,新的用户名应该被保存,但它没有。
【问题讨论】:
标签: asp.net templates field asp.net-dynamic-data
我正在使用 asp.net 动态数据。我想为用户自动填写一个字段。该文件为用户名,可通过集成windows认证获取。
我创建了一个字段模板,它在插入模式下工作,但在更新模式下,一旦另一个用户更新了记录,新的用户名应该被保存,但它没有。
【问题讨论】:
标签: asp.net templates field asp.net-dynamic-data
我找到了一个解决方案,我想分享它。
为实体字段申请UIHint:
[UIHint("UserName")]
public object Name { get; set; }
创建一个新的FieldTemplate:
<asp:TextBox ID="TextBox1" runat="server" ReadOnly="true" BorderStyle="None"
BackColor="Transparent" Text='<%# FieldValueEditString %>'></asp:TextBox>
FieldTemplate 的代码隐藏:
public partial class UserName_EditField : FieldTemplateUserControl
{
protected void Page_Load(object sender, EventArgs e)
{
SetUpValidator(RequiredFieldValidator1);
EditFieldTemplateUserControl.InsertHelpText(this);
}
protected override void OnDataBinding(EventArgs e)
{
base.OnDataBinding(e);
TextBox1.Visible = true;
}
protected string UserName
{
get
{
var name = this.Page.User.Identity.Name.ToString();
return name;
}
}
protected override void ExtractValues(IOrderedDictionary dictionary)
{
if (Page.IsPostBack)
{// only assign value when user posts back.
this.TextBox1.Text = this.UserName.ToUpper();
dictionary[Column.Name] = ConvertEditedValue(TextBox1.Text);
}
}
public override Control DataControl
{
get
{
return TextBox1;
}
}
}
【讨论】: