在asp.net mvc 中使用日期控件(My97DatePicker)(一) 中我們成功封裝了日期控件並且能夠在界面中顯示和選擇日期,但是我在後面的使用中發現當我將試圖頁面傳回的數據轉換爲User對象的時候總是少日期類型的鍵值對,我一度以爲是擴展的HtmlHelper有問題,但是明明已經在頁面上成功生成日期選擇框了,然後查找各種問題,不得結果。偶然之我查看了下生成Create試圖的html頁面html 源碼,發現自定義的日期控件html 標籤只有id,沒有name,我立刻意識到問題所在,將日期框控件的HtmlHelper修改了一下 運行發現成功獲得了所有數據!
沒有name 的html
<div class="editor-field">
<input id="Name" name="Name" type="text" value="" />
</div>
<div class="editor-label">
<label for="Age">年齡</label>
</div>
<div class="editor-field">
<input id="Age" name="Age" type="text" value="" />
</div>
<div class="editor-label">
<label for="Birthday">生日</label>
</div>
<div class="editor-field">
<span style="color:#ff0000;"> <input type="text" id="Birthday" onclick="WdatePicker({el:'Birthday'})" class="Wdate" value="" /></span>
</div>
<p>
<input type="submit" value="Create" />
</p>
修改完成的HtmlHelper 中My97DatePicker的方法,之前是沒有紅色標示的name屬性
private static string GenerateHtml(string name, DateTime? date, string format)
{
if (date != null)
{
return "<input type=\"text\" id=\"" + name + "\" <span style="color:#ff0000;"> name=\"" + name + "\"</span> onclick=\"WdatePicker({el:'" + name + "'})\" class=\"Wdate\" value=\"" + date.Value.ToString(format) + "\" />";
}
else
{
return "<input type=\"text\" id=\"" + name + "\" <span style="color:#ff0000;"> name=\"" + name + "\"</span> onclick=\"WdatePicker({el:'" + name + "'})\" class=\"Wdate\" value=\"\" />";
}
}
控制器中轉換對象的代碼,之前collection 中總是沒有Birthday的鍵值對數據
[HttpPost]
public ActionResult Create(FormCollection collection)
{
try
{
// TODO: Add insert logic here
User user = new User();
TryUpdateModel<User>(user);
return RedirectToAction("Index");
}
catch
{
return View();
}
}
總結:在自定義控件的HtmlHelper時候要注意同時生成id和name,asp.net mvc 應該是根據id和name 來進行收集鍵值對集合的。
如果您覺得我的文章對您有所幫助,歡迎掃碼進行讚賞!