我會先說我的術語可能關閉,這就是爲什麼我可能無法找到這個問題的答案,併爲文本牆道歉。ASP.NET MVC2強類型查看數據綁定問題
我有一個強類型的視圖,它繼承自名爲Record的自定義類型。 Record具有不同數據類型的命名字段的字典 - 一些字符串,一些整數,一些DateTime/TimeSpans。
通過窗體上的一個下拉列表onchange,我得到了一個HttpPost Action方法在我的控制器中 - 據我所知,當前視圖的模型應該是'傳遞'到控制器方法。它似乎是這樣做的,但只是部分:記錄的DateTime和TimeSpan字段作爲其默認值。所有的字符串,int等字段都很好。
我在後端發生的數據綁定期間通過Record代碼進行調試,因爲調用HttpPost控制器方法,並且似乎創建了一個新的空白記錄,然後設置了各種屬性 - 但是如果作爲構造的一部分一個「空白」記錄屬性被初始化爲某個有效的非空值,這些屬性的Set方法永遠不會被調用。
我的問題是 - 這個數據綁定階段究竟發生了什麼?這是我描述的嗎?我是否必須將我的Record初始化的所有屬性設置爲空值才能正確地將它們綁定到數據綁定?
編輯:記錄(簡化的)
public class Record
{
public Record() : base()
{
fields.Add("Id", new FieldValue { DataType = typeof(int) });
fields.Add("StartDateTime", new FieldValue { DataType = typeof(DateTime) });
}
private Dictionary<string, FieldValue> fields = new Dictionary<string, FieldValue>();
public Dictionary<string, FieldValue> Fields
{
get
{
return fields;
}
}
public long? Id
{
get
{
FieldValue fieldValue = Fields["Id"];
return fieldValue != null ? (long?)fieldValue.Value : null;
}
set
{
SetFieldValue("Id", value);
}
}
public DateTime StartDateTime
{
get
{
FieldValue fieldValue = Fields["StartDateTime"];
if (fieldValue == null || fieldValue.Value == null)
{
return DateTime.MinValue;
}
else
{
return (DateTime)fieldValue.Value;
}
}
set
{
SetFieldValue("StartDateTime", value);
}
}
protected void SetFieldValue(string fieldName, object value)
{
Fields[fieldName] = new FieldValue(value);
}
}
值類FieldValues的詞典:
public class FieldValue
{
internal FieldValue(object value)
{
DataType = value.GetType();
Value = value;
}
internal FieldValue()
{ }
public Type DataType { get; set; } //The data type of the field
public object Value { get; set; } //The value of the field
}
我顯示強類型的記錄視圖,顯示開始時間的形式,但不是Id。當發生HttpPost時,處理該視圖的HttpPosts的控制器方法會收到與原始Record具有相同Id的記錄,但會收到DateTime.MinValue的StartDateTime。
Edit2:我在視圖中顯示任何模型字段的方式是否與控制器的HttpPost方法將「看到」模型有什麼關係?
你能詳細說明一下你想要的/觀察到的行爲是什麼嗎? – 2010-10-26 04:16:59
也許一些代碼會揭示一些事情正在發生。 – jordanbtucker 2010-10-26 04:18:06
在原帖中添加的代碼。我正在理解MVC如何將視圖模型的副本「傳遞」給控制器方法 - 我可能在做一些愚蠢的事情,如果我知道模型究竟是如何回到控制器。對於我所知道的答案是'當然它不會覆蓋默認值,這不是它的工作原理' – LMF 2010-10-26 04:59:12