1

私は DatePicker を持っています DatePicker の値を選択でき、TextBox に設定されましたが、モデルに入ることができず、null が表示されます。

私の日付ピッカーはここにあります

@Html.TextBoxFor(model => model.CallDetailModel.CallDate, new { id = "callDate" })

ここに私のJavaScript

@section Scripts {
    <script>
        $("#callDate").datepicker({
            changeMonth: true,
            changeYear: true
        });

</script>
}

_Layoutフッターを閉じた後、ボディタグの終了前にテーマとUIを追加しました

    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/jqueryui")
    @Styles.Render("~/Content/themes/base/css")
    @Scripts.Render("~/bundles/jquerymenu")
    @RenderSection("scripts", required: false)

このような私の CallDate プロパティ

public DateTime? CallDate { get; set; }

送信ボタンをクリックすると、選択した日付の値を取得できず、null 値が表示されます。

Create Actionはここにいます

    [HttpPost]
    public ActionResult Create(CallModels model)
    {
        CallDetail obj = new CallDetail();
        obj.AccompaniedBy = model.CallDetailModel.AccompaniedBy;
        obj.BudgetFrom = model.CallDetailModel.BudgetFrom;
        obj.BudgetTo = model.CallDetailModel.BudgetTo;
        obj.CallCategory = model.CallDetailModel.CallCategory;
        obj.CallDate = model.CallDetailModel.CallDate;
        obj.CallDescription = model.CallDetailModel.CallDescription;
        obj.CallDuration = model.CallDetailModel.CallDuration;
        obj.CallTime = model.CallDetailModel.CallTime;
        obj.CallType = model.CallDetailModel.CallType;
        obj.ContactDetailId = model.CallDetailModel.ContactDetailId;
        obj.Id = model.CallDetailModel.ContactDetailId;
        obj.InquirySerialNo = model.CallDetailModel.InquirySerialNo;
        obj.Priority = model.CallDetailModel.Priority;
        obj.ProjectName = model.CallDetailModel.ProjectName;
        obj.PropertySerialNo = model.CallDetailModel.PropertySerialNo;
        obj.PurposeOfCall = model.CallDetailModel.PurposeOfCall;
        obj.Reference = model.CallDetailModel.Reference;
        obj.Reminder = model.CallDetailModel.Reminder;
        obj.Result = model.CallDetailModel.Result;
        obj.Tag = model.CallDetailModel.Tag;
        obj.ContactDetail = null;
        obj.IsActive = true;

        if (ModelState.IsValid)
        {
            myChannelFactory = new ChannelFactory<IBuilderTrackerServices>(myBinding, myEndpoint);
            // Create a channel.
            IBuilderTrackerServices wcfClientProperty = myChannelFactory.CreateChannel();
            var modelResult = wcfClientProperty.CreateCall(obj);
            ((IClientChannel)wcfClientProperty).Close();
            if (modelResult)
                return RedirectToAction("~/Views/CRM/Call/Index.cshtml");
        }
        return View(obj);
    }

何が悪いのかわからない..? ありがとうございました。

4

1 に答える 1

0

Omgなんてコード...何をしようとしているのかわかりませんが、バインディングは正しく見え、日付がnullである理由がわかりません。

問題を解決するには:

  1. 入力テキスト ボックスがフォーム タグ内にあることを確認します。
  2. フォーム コレクション パラメーターをアクションに追加し、デバッグ モードで検査してみてください。

    public ActionResult Create(CallModels モデル、FormCollection フォーム)

  3. DateTime に定義されたカスタム モデル バインダーがないことを確認します。

  4. 日付の形式が正しいことを確認してください。フィールド タイプを DateTime から文字列に変更して、結果を調べてください。

しかし、コードには別の問題がたくさんあります。のようなことをしようとする

   [HttpPost]
public ActionResult Create(CallModels model)
{       
    if (ModelState.IsValid) //to validate the detail only if(TryValidateModel(model.CallDetailModel))
    {
        myChannelFactory = new ChannelFactory<IBuilderTrackerServices>(myBinding, myEndpoint);
        // Create a channel.
        IBuilderTrackerServices wcfClientProperty = myChannelFactory.CreateChannel();
        var modelResult = wcfClientProperty.CreateCall(model.CallDetailModel); //dont create the new detail object, just get it from model.
        ((IClientChannel)wcfClientProperty).Close();
        if (modelResult)
            return RedirectToAction("Index");//redirect to anction - not to view.
    }
    return View(model); //!!!!! return your model to a same page not an obj
}
于 2013-06-17T10:41:49.227 に答える