単純な3フィールドフォームを表示するビューを作成しています。私のデータベース層を介してコントローラから取得された値はnullなので、フォームフィールドは空白として表示されます。これは期待どおりです。ポストバック時にモデルプロパティがnullになる
3つのフォームフィールドを空白にして[保存]をクリックすると、ストアドプロシージャを呼び出して行を更新するときに(これら3つのフィールドがデータベースでNULL可能です)、次のような例外が発生します。ストアドプロシージャは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);
のように、これらのパラメータを追加し、あなたは彼らがここにnullの場合、私がチェックすべきと言っていますか?そしてもしそうなら、DBNull.Valueを追加しますか?
空はnullと同じではありません。ストアドプロシージャに値が必要なように聞こえます(空の文字列であっても)。これはビジネス要件か、ストアドプロシージャのコーディング方法ですか? – JuanR
空の値をnullとしてバインドする場合は、そのためにModelBinderを作成する必要があります。モデルにデータベースを保存する前に、ModelState.IsValidにtrueが反映されているかどうかを確認する前に確認してください。 – Zinov