C# Model 클래스를 반사로 동적으로 폼에 불러오기
7169 단어 velocity
코드는 다음과 같습니다.
if (Labs.Utils.ValidateUtil.IsNumber(ActionId))
{
int ActionIdForInt = Convert.ToInt32(ActionId);
model = bll.GetModel(ActionIdForInt);
if (model != null)
{ // VTL
VelocityContext.Put("CmsType", model.CmsType);
VelocityContext.Put("ConnectionString", model.ConnectionString);
VelocityContext.Put("DataBaseType", model.DataBaseType);
VelocityContext.Put("DevLang", model.DevLang);
VelocityContext.Put("Id", model.Id);
VelocityContext.Put("SiteDomain", model.SiteDomain);
VelocityContext.Put("Title", model.Title);
// this.TextBox.Text=model.CmsType;
…
}
else
Page.ErrMsg = validate.nodata_err;
}
else
Page.ErrMsg = validate.id_format_err;
위의 코드는 매우 번거롭고 무미건조하며 가장 화가 나는 것은 오류가 발생하기 쉽다는 것이다. 마치 ASp 코드를 쓰는 것 같다. 다음과 같은 방법으로 위의 문제를 해결할 수 있다.
/// <summary>
/// Velocity
/// </summary>
/// <param name="obj"> </param>
public static void ModelToVTL(object obj)
{
Type t = obj.GetType();
System.Reflection.PropertyInfo[] Property = t.GetProperties();
foreach (System.Reflection.PropertyInfo pi in Property)
{
VelocityContext.Put(pi.Name, new Labs.Web.UserDataReflection.BLL().GetModelValue(pi.Name, obj));
}
}
반사를 이용하여 실체 클래스 안의 공유 속성을 얻고 옮겨다니며 VTL 값을 설정합니다.
GetModelValue라는 방법도 사용되었는데, 사실 지난 로그에서 나는 이미 코드를 써서, 클래스의 어떤 구성원의 속성을 얻었다. 여기에 다시 붙여 놓았는데, 코드는 다음과 같다.
/// <summary>
///
/// </summary>
/// <param name="FieldName"></param>
/// <param name="obj"></param>
/// <returns></returns>
public string GetModelValue(string FieldName, object obj)
{
try
{
Type Ts = obj.GetType();
object o = Ts.GetProperty(FieldName).GetValue(obj, null);
string Value = Convert.ToString(o);
if (string.IsNullOrEmpty(Value)) return null;
return Value;
}
catch
{
return null;
}
}
호출 방법:
if (Labs.Utils.ValidateUtil.IsNumber(ActionId))
{
int ActionIdForInt = Convert.ToInt32(ActionId);
model = bll.GetModel(ActionIdForInt);
if (model != null)
{
Labs.Web.WebPublic.ModelToVTL(model);// , .
}
else
Page.ErrMsg = validate.nodata_err;
}
else
Page.ErrMsg = validate.id_format_err;
이런 방법은 호출이 간단하고 오류가 발생하기 쉬우나, 프론트 데스크톱의 설정을 할 때, Name 값은 속성 값과 같아야 한다. 그렇지 않으면 조절할 수 없다.
프론트 데스크톱에 설정된 코드를 다시 붙여 주세요. 여기는 VTL을 사용했습니다. 서로 다른 페이지 구조는 다른 방법을 사용해야 합니다.
<form action="${Url}" method="post" name="addForm">
<li>
<span class="color_f00">*</span> :<br>
<input type="text" name="SiteDomain" value="$!{SiteDomain}" class="input1" onblur="LoadSite(this.value)" />
<span class="color_999"> "www.xinlg.com", "http://"</span>
</li>
<li class="DataBaseType">
<span class="color_f00">*</span> :<br>
<select name="DataBaseType" id="DataBaseType">
<option value="">-- --</option>
#foreach($db in ${DataBaseType_D})
<option value="$db">$db</option>
#end
</select>
</li>
<li class="ConnectionString">
<span class="color_f00">*</span> :<br>
<input type="text" name="ConnectionString" style="width:50%" value="$!{ConnectionString}" class="input1" />
</li>
#if(${display})
<div class="box">
<li>
<span class="color_999">( )</span>:<br>
<input type="text" id="sql_Server" />
</li>
<li>
:<br>
<input type="text" id="sql_User" />
</li>
<li>
:<br>
<input type="text" id="sql_Password" />
</li>
</div>
#end
<li>
<span class="color_f00">*</span> :<br>
<input type="text" name="Title" class="input1" value="$!{Title}" />
</li>
<li class="line">
:<br>
<select name="DevLang" id="DevLang">
<option value="">-- --</option>
#foreach($lang in ${DevLang_D})
<option value="$lang">$lang</option>
#end
</select>
</li>
<li>
:<br>
<input type="text" name="CmsType" id="CmsType" class="input1" value="$!{CmsType}" /> <<
<select onchange="$('#CmsType').val(this.value);">
<option value="">-- --</option>
#foreach($Cms in ${CmsType_D})
<option value="$Cms">$Cms</option>
#end
</select>
</li>
#if(${Action}=="edit")
<li><input type="submit" value=" " name="editBtn" class="btn1" /></li>
#else
<li><input type="submit" value=" " name="addBtn" class="btn1" /></li>
#end
</form>
모두들 벽돌을 던지지 마세요, 허허.
역장님들 아래를 보세요>>>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
POJ 3300 Tour de FranceAt any time the chain connects one of the front sprockets to one of the rear sprockets. The drive ratio -- the ratio of ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.