3

ユーザーが携帯電話番号を入力してタブアウトしたときにリードを作成する必要があるアプリケーションを作成しています。入力された携帯電話番号が有効な場合、リードが作成されます(フォームの他のすべての詳細とともに)。しかし、モデルをビューからコントローラーに渡すと、データがnullになります。

意見

 @{
    ViewBag.Title = "EmailQuote";
    Layout = "~/Views/Shared/Template.cshtml";
    }
    @model Max.VirtualSalesManager.UI.ViewModels.LeadViewModel

    @{
     var data = Html.Raw(Json.Encode(Model));
    }
    <script src="@Url.Content("~/Scripts/Common.js")" type="text/javascript"></script>
    <h2>
       EmailQuote</h2>
    @using Acidaes.VirtualSalesManager.UI.Helpers
    @using (Html.BeginForm("GenerateEQuote", "Quote", FormMethod.Post,             new{id="frmEmailQuote" }))
    {

      @Html.MandatoryLabel("Name", false, new { style = "width: 50px; display: inline" })     @Html.FullName()
   @Html.MandatoryLabel("City", false, new { style = "width: 50px; display: inline" }) @Html.DropDownListFor(m => m.CommunicationAddress.City, new SelectList(ViewBag.CityList, "Key", "Value"), "select", new { id = "ddlCity" })
   @Html.MandatoryLabel("Mobile No.", false, new { style = "width: 100px; display: inline" }) @Html.TextBoxFor(m => m.MobileNumber, new { style = "width: 100px", id = "txtmobilenumber", onBlur = "createLead('"+@data+"')" })
   @Html.MandatoryLabel("Email ID", false, new { style = "width: 80px; display: inline" }) @Html.TextBoxFor(m => m.EmailId, new { style = "width: 100px" })
   @Html.HiddenFor(m => m.LeadId)
    <input type="submit" id="btnSubmit" />
} 

JS

function createLead(data) {
var number = /^[0-9]+$/;
var mobileNumber = document.getElementById('txtmobilenumber').value;
if (mobileNumber.match(number) && mobileNumber.length == 10) {
    var jsondata = JSON.stringify(data);
    var Parameters = "{'data':'" + ("#frmEmailQuote").serialize() + "'}";
    Events.DoServerRequest('/MAXVSM/Quote/test', Parameters, GetLeadId);
}
}

DoServerRequest 関数

 DoServerRequest: function (url, data, funSuccess) {

    $.ajax({
        type: "POST",
        url: url,
        data: data,
        contentType: "application/json; charset=utf-8",
        async: false,
        dataType: "json",
        success: funSuccess,
        error: function () {
            alert("Error in getting list");
        }
    });


Controller
[HttpPost]
    [ActionName("test")]
    public JsonResult test(LeadViewModel data)
    {
        LeadViewModel t = new LeadViewModel();
        t.MobileNumber = data.MobileNumber;

        return Json(t);
    }

ビューから ajax 関数に正常に到達するデータですが、データがコントローラーに到達するときは null です。

4

1 に答える 1

1

contentTypeajax 呼び出しから削除してみてください:

DoServerRequest: function (url, data, funSuccess) {
    $.post({
        type: "POST",
        url: url,
        data: data,
        async: false,
        dataType: "json",
        success: funSuccess,
        error: function () {
            alert("Error in getting list");
        }
    });
}

サーバーは JSON コンテンツを想定していませんが、デフォルト値である application/x-www-form-urlencoded を想定しています。

これは、通常の Javascript オブジェクトまたは文字列もデータとして使用する必要があることを意味します。

if (mobileNumber.match(number) && mobileNumber.length == 10) {
    Events.DoServerRequest('/MAXVSM/Quote/test', $("#frmEmailQuote").serialize(), GetLeadId);
}
于 2013-04-08T08:35:05.073 に答える