我正在MVC 5应用程序中创建动态用户控件。我的视图模型如下所示:
public class StoredProceduerParametersRecordViewModel
{
public string ProcedureName { get; set; }
public string ParameterName { get; set; }
public string ServerName { get; set; }
public object ParameterValue { get; set; }
//public object NewParameterName { get; set; }
}
NewParameterName可以是int,string,bool或任何数据类型。
我从存储过程参数
获取NewParameterName值List<StoredProcedureParameter> parameters = new List<StoredProcedureParameter>();
parameters = database.StoredProcedures[procedure.ProcedureName]
.Parameters.OfType<StoredProcedureParameter>()
.ToList();
foreach (var param in parameters)
{
StoredProceduerParametersRecordViewModel obj_parameter =
new StoredProceduerParametersRecordViewModel();
obj_parameter.ParameterName = param.Name;
obj_parameter.NewParameterName = CommonHelper.ConvertSmoToClsType(param.DataType.SqlDataType, string.Empty);
stored_procedure_parameters_list.Add(obj_parameter);
}
我的CommonHelper.ConvertSmoToClsType如下所示:
public static object ConvertSmoToClsType(SqlDataType dataType, string currentValue)
{
object Object = new object();
switch (dataType)
{
case SqlDataType.BigInt:
Object = (String.IsNullOrEmpty(currentValue)) ? (Int64)0 : Int64.Parse(currentValue);
break;
case SqlDataType.Bit:
Object = (String.IsNullOrEmpty(currentValue)) ? (Boolean)false : Boolean.Parse(currentValue);
break;
case SqlDataType.Char:
case SqlDataType.VarChar:
case SqlDataType.VarCharMax:
Object = (String.IsNullOrEmpty(currentValue)) ? String.Empty : currentValue;
break;
case SqlDataType.Real:
case SqlDataType.Numeric:
case SqlDataType.Float:
Object = (String.IsNullOrEmpty(currentValue)) ? 0D : Double.Parse(currentValue);
break;
and so on...
}
}
我正在尝试使用HTML.Editor来显示用户控件
@foreach (var obj in Model.List_StoredProceduresParametersRecords_ViewModel)
{
<tr id="@obj.ParameterName">
<td class="parameterName" data-value="@obj.ParameterName">@obj.ParameterName</td>
<td>@Html.Editor("NewParameterName")</td>
</tr>
}
我使用此链接引用了我的代码---&gt; ASP.NET MVC3 Html.EditorFor and property of type object 但是,此解决方案不适用于列表。
如何在foreach循环中使用Html.Editor或Html.EditorFor显示控件?
答案 0 :(得分:1)
EditorFor无法准备空字符串,所以我所做的就是改变这行代码。
Object = (String.IsNullOrEmpty(currentValue)) ? String.Empty : currentValue;
要
Object = (String.IsNullOrEmpty(currentValue)) ? " " : currentValue;
我也改变了我的代码
<td>@Html.Editor("NewParameterName")</td>
要
<td>@Html.EditorFor(model => obj.ParameterValue)</td>
它现在有效,除了我的Double对象。你有什么想法吗?