0

私のMVC 4 Webアプリには、jQueryタブテーブルを含むモデルデータがあり、各タブには、このメインタブテーブルと1対多の関係として機能するいくつかの埋め込みテーブルがあり、メインタブテーブルにはボタンがあります( 「追加」)をクリックすると、ユーザーが入力したデータを含むデータフィールドの行が、タブテーブルの1つに埋め込まれた子テーブル(部分ビュー)に追加されます。ボタンとコントローラーの背後にあるコードデータをテーブルに保存しましたが、現在の埋め込みは更新されず、新しく追加されたテーブル データがまったく表示されません。誰でもこの問題を解決できることに感謝します。これは、[追加] ボタンの背後にある JavaScript です。

  function AddMeal() {

    //Build your Product
    var product = { "MDate": $("#MDate").val(), "MRegion": $("#MRegion").va(), "MBAmount":       $("#MBAmount").val(), 
            "MLAmount": $("#MLAmount").val(), "MDAmount": $("#MDAmount").val(), "FINtravelID":               $("#FINtravelID").val() };

    $.post('@Url.Action("Edit1","Travel")', product, function (data) {

    if (data == null) {
        location = location.href;
    }
    else {
        //Populate your MealTable element with the results of your Partial View
        $('#MealTable').html(data);
    }
});}

これはコントローラーです:

  [HttpPost]
  public ActionResult Edit1( Meal product)
    {

        db.Meals.Add(product);
        db.SaveChanges();  
        ViewBag.SaveMeal = "1";
        return PartialView("_MealPartial", product);

    }

これは、この質問に関連するカミソリ ビューです。

        @model Travelmvc.Models.FINtravel
        <input type="button" value="Add" id="AddButton1"  onclick="AddMeal()"/>
       <div id="MealPartial">

       @Html.Partial("~/Views/Shared/_MealPartial.cshtml")

       </div>

これは部分ビューの詳細コードです:

   @model Travelmvc.Models.FINtravel
      <table class="MealT" id="MealTable" >
       @if (Model != null) {
             if (Model.Meals != null){ //here this line code always returns null, that is why the    
        read data created in SQL table can not display in the loop

       foreach (var item in Model.Meals)
             {

                <tr>

                    <td>
                        @Html.DisplayFor(modelItem => item.MDate)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.MRegion)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.MBAmount)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.MLAmount)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.MDAmount)
                    </td>
                     <td>
                        @Html.DisplayFor(modelItem => item.MTAmount)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.MProduct)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.MRC)
                    </td>
                     <td>
                        @Html.DisplayFor(modelItem => item.MLocation)
                    </td>
                    <td>
                        @Html.DisplayFor(modelItem => item.MPOC)
                    </td>

                    <td>
                        aa
                    </td>
                    <td>
                        ff
                    </td>
                </tr>
             } 
...

これがFINtravel and Mealのモデルです。

public class FINtravel
{

   public int FINtravelID { get; set; }

   public string ClaimNo { get; set; }

   public virtual ICollection<Meal> Meals { get; set; }
}

public class Meal
{
    public int MealID { get; set; }
    public int FINtravelID { get; set; }
    public virtual FINtravel FINtravel { get; set; }
}

私の質問は、Edit1 コントローラーで作成された食事データがカミソリ ビュー (部分ビュー) に表示されないのはなぜですか? しかし、データがバックエンドから SQL テーブルに保存されていることがわかります。誰でもこの問題から私を助けることができますか? よろしくお願いします。

4

2 に答える 2

0
  fintravel = db.FINtravel.Find(product.FINtravelID);//
  return PartialView("_MealPartial", fintravel);
 solves the problem, thanks for all helps in this thread
于 2013-11-06T22:15:37.237 に答える
0

次のようにコントローラーのコードを変更してみてください。

public ActionResult Edit1( Meal product)
{

    db.Meals.Add(product);
    db.SaveChanges();  
    product = db.Meals.Find(product.MealID);//get saved product with filled property FINtravel
    ViewBag.SaveMeal = "1";
    return PartialView("_MealPartial", product.FINtravel);
}
于 2013-11-06T13:53:23.037 に答える