2017-02-07 6 views
3

Webページに関数を書いています。シリアル番号を入力すると、SQLデータベースのシリアル番号と一緒になる部品のモデルが検索されます。今、JsonResultは正しい情報を見つけようとしていますが、シリアル番号ボックスをクリックしても表示されないので、jqueryとajaxに何か問題があります。JqueryとAjaxでデータを返す

ここにコントローラコードがあります。

public JsonResult SerialNumberSearch(string serialnum) 
    { 
     var result = db.IASerialNoMasters.Where(x => x.SerialNo == serialnum).Select(x => x.Model).Single().ToString(); 

     return Json(result, JsonRequestBehavior.AllowGet); 
    } 

ここに私のビューに現在あるスクリプトがあります。

<script type="text/javascript"> 
    var serialnum; 
    var url = '@Url.Action("SerialNumberSearch", "WarrantyRegistration")' 
    $("#SerialNum").blur(function() { 
     GetLiftModel(); 
    }); 
    function GetLiftModel() { 
     serialnum = $("#SerialNum").val(); 
     $.ajax({ 
      type: "GET", 
      url: url, 
      data: { serialnum: serialnum }, 
      success: function(data) { 
       $('#ModelName').val(data.Model); 
      } 
     }) 
    } 
</script> 

これは、ビューのテキストボックスのコードです。

 <div class="row"> 
      @Html.TextBoxFor(model => model.SerialNum, new { placeholder = "Serial #" }) 
      @Html.ValidationMessageFor(model => model.SerialNum, null, new { @class = "text-danger" }) 
     </div> 

     <br /> 

     <div class="column-1"> 
      @Html.TextBoxFor(model => model.ModelName, new { placeholder = "Model" }) 
      @Html.ValidationMessageFor(model => model.ModelName, null, new { @class = "text-danger" }) 
     </div> 

コードのGetLiftModel関数から何が欠けているのか誰にも分かりますか?

答えて

1

data.Modelを表示してもよろしいですか?あなたがJsonResultを返す場合、data変数が実際にはシリアル番号を表しているので、data.Modelは実際にはundefinedです。 あなたがJsonResultを返却する理由がないだけstringを戻ってきているという事実に基づいて一方

$.ajax({ 
     type: "GET", 
     url: url, 
     data: { serialnum: serialnum }, 
     success: function(data) { 
      $('#ModelName').val(data); 
      } 
     }) 

に変更してください。あなたは、シリアル番号の同じ部分を取り出し終わるんでした)

public JsonResult SerialNumberSearch(string serialnum) 
{ 
    var result = db.IASerialNoMasters 
        .Where(x => x.SerialNo == serialnum) 
        .Select(x => x.Model).Single().ToString(); 
    return result; 
} 
+0

これで作業が終了しました、ありがとうございます!私は今数時間、これに固執してきました。私はちょうどそれをテストし、それは正しい部分をもたらした。 – bubbajake00

+0

ようこそ。また、LINQクエリについても考えることをお勧めします。一致するシリアル番号がない場合はどうなりますか?今では例外をスローしていますが、クライアント側に知らせて、これをUIに適切に表示することができます。 –

+0

ああ、私はちょうどそれをコーディングし終わった。コードをもう少し複雑にしてしまう前に、データが最初に出てくるのを心配していました。 – bubbajake00

1

これが最終的にアクセスしたいかに依存して、複数のプロパティにアクセスする必要がある場合:

  • は、単一のプロパティが必要ですか?単一のプロパティだけが必要な場合、そのプロパティを現在のコードと同じように分離し、それを渡すことができるはずです。
  • 複数のプロパティが必要ですか?次に、SerialNumberSearch()メソッドからオブジェクト全体またはその一部を返す必要があります。
  • あなたの現在のコードは、あなただけの単一のプロパティを返すことがありますことを示していると思われる最終ToString()呼び出し、この場合はModel性質がある単一のプロパティを返す

var result = db.IASerialNoMasters 
       .Where(x => x.SerialNo == serialnum) 
       .Select(x => x.Model) 
       .Single() 
       .ToString(); // This returns a string 

この場合、返されているdataオブジェクトにはすでにその特定のプロパティが含まれているため、表示されているとおりにdataを使用するだけです

success: function(data) { 
    // data will already contain your result, so just use it 
    $('#ModelName').val(data); 
} 

グラフ複数のプロパティまたはオブジェクトを返す

あなたはJSONであなたのオブジェクトから複数のプロパティにアクセスできることを期待していた場合、あなたが実際にオブジェクト自身を返し、聞かせしたいと思う:以下シリアライザは、期待どおりに使用することができるようにJavaScriptにそれを渡して処理します。

public JsonResult SerialNumberSearch(string serialnum) 
{ 
    var result = db.IASerialNoMasters 
        .SingleOrDefault(x => x.SerialNo == serialnum);; 
    if(result == null) 
    { 
     // Do something if it doesn't exist 
     return HttpNotFound(); 
    } 
    return Json(result, JsonRequestBehavior.AllowGet); 
} 

そして、単にあなたの中にあなたのdataオブジェクトから必要なプロパティにアクセスJavascript code:

success: function(data) { 
    // data will already contain your result, so just use it 
    $('#ModelName').val(data.Model); 
}    
+0

に.ToStringを(削除のあなたの提案をお使いのコントローラメソッドのシグネチャを変更することができ、ヤロスラフのソリューションは、正しいデータを持って来ることになりました。助けてくれてありがとう! – bubbajake00

+0

私の返信を更新しました。あなたの元の投稿は、 'Model'が単に返されていた文字列であることははっきりしていませんでした(別のクラスだと思ったので)。いずれにしても、単一のプロパティを処理する方法や、グラフ全体を返す例を追加しました。 –

+0

ああ、申し訳ありません!私はjqueryとajaxにはかなり新しいので、違いがあることは分かりませんでした。 – bubbajake00

関連する問題