开发的时候想当然的认为主表解析出来就是一个dropdownlist,可是在大数据测试的时候,发现有情况。
首先创建一个子列表:DetailList,并添加19条数据:

创建主列表:MainList,并新建“查阅项”栏关联这个子表的标题。

MainList新建页面显示查阅项控件的样式:

当DetailList再增加一条数据

这个时候,MainList的新建显示将会不同。

显然当“查阅项”超过20条数据的情况,这个formfield会改变控件的样式。
如果我们需要后台生成这个控件的对象,或者编码将formfield通过对象解析出来,并获取值的时候,就要注意两种不同的情况了
首先判断这个formfield的类型
SPList spList = SPContext.Current.Web.Lists["MainList"]; string fieldType = spList.Fields["DetailList标题"].TypeAsString;
则这个fieldType为Lookup
根据这个类型通过生成对象取值
string fieldValue = string.Empty;//获取选中的值
if (fieldType == "Lookup")
{
LookupField lfField = ((LookupField)this.FindControl(controlId));
string name = lfField.Field.InternalName;
if (lfField.Controls[0] is DropDownList)
{
DropDownList ddl = (DropDownList)lfField.Controls[0];
if (ddl.SelectedItem != null)
{
fieldValue = ddl.SelectedItem.Text;
}
}
if (lfField.Controls[0] is Literal)
{
TextBox tb = (TextBox)ddcField.Controls[1];//注意是第2个控件
if (tb.Text != null)
{
fieldValue = tb.Text;
}
}
}