我正在創建一個顯示簡單3字段窗體的視圖。通過我的數據庫層從控制器中檢索的值爲null,因此表單域顯示爲空,這與預期相同。模型屬性在回發中爲null
我遇到的問題是,如果我將3個表單字段留空並單擊保存,當涉及到調用存儲過程來更新行(這3個字段在數據庫中爲空)時,我得到一個異常存儲過程不喜歡null。
這裏是我的模型:
public class UserModel
{
[DisplayName("Campaign Name")]
public string CampaignName { get; set; }
[DisplayName("User Owner Name")]
public string UserOwnerName { get; set; }
[DisplayName("Lead Status")]
public string LeadStatus { get; set; }
}
控制器:
[HttpPost]
public ActionResult OptionalFields(Models.UserModel model)
{
var businessLayerFunctions = new BL.Functions();
businessLayerFunctions.UpdateConfig(model);
return View();
}
查看:
@using (Html.BeginForm("OptionalFields", "Home"))
{
@Html.HiddenFor(m => m.ConfigID)
@Html.LabelFor(m => m.CampaignName)
@Html.TextBoxFor(m => m.CampaignName)
@Html.LabelFor(m => m.LeadStatus)
@Html.TextBoxFor(m => m.LeadStatus)
@Html.LabelFor(m => m.UserOwnerName)
@Html.TextBoxFor(m => m.UserOwnerName)
<p><input type="submit" id="optionalfields" value="Save" /></p>
}
我的問題是,如果這些字段爲空時,我提交他們,他們會不作爲「」綁定到模型?
控制器方法內的是的Request.Form
{ConfigID來= 123 & CAMPAIGNNAME = & LeadStatus = & UserOwnerName =}
正在被設計爲空的字段?現在,我將不得不檢查null並分配一個空白字符串以使存儲過程起作用。
我的存儲過程只是一個襯墊
UPDATE dbo.table
SET UserOwnerName = @userOwnerName,
LeadStatus = @leadStatus,
CampaignName = @campaignName,
LastModifiedDate = @lastModifiedDate
WHERE ConfigID = @configID
我添加這些參數,像這樣
comm.Parameters.AddWithValue("@configID", configID);
comm.Parameters.AddWithValue("@userOwnerName", userOwnerName);
comm.Parameters.AddWithValue("@leadStatus", leadStatus);
comm.Parameters.AddWithValue("@campaignName", campaignName);
comm.Parameters.AddWithValue("@lastModifiedDate", DateTime.UtcNow);
你是說我應該檢查它們是否爲空嗎?如果是這樣,添加DBNull.Value?
空不等於null。這聽起來像你的存儲過程需要一個值(即使它是一個空字符串)。這是業務需求還是存儲過程如何編碼? – JuanR
如果你想要將空值綁定爲null,你需要爲它創建一個ModelBinder。在將模型保存到數據庫之前,嘗試檢查ModelState.IsValid是否反映真實之前。 – Zinov