在这种情况下如何获取部分视图数据

How to get partialview data in this situation?

本文关键字:视图 数据 获取 这种情况下 何获取      更新时间:2023-09-26

在我的 MVC 4 Web 应用程序中,我有一个带有 jQuery 选项卡表的模型数据,在每个选项卡中,我有一些嵌入式表,它们与此主选项卡表一对多关系,在主选项卡表中,我有一个按钮("添加"),当单击它时,它旁边的一行数据字段,用户输入的数据将被添加到嵌入其中之一的子表(这是分视图)中选项卡表,现在,按钮和控制器背后的代码将数据保存到表中,但当前嵌入的内容根本没有更新以显示新添加的表数据。我很感激任何人都可以帮助我解决这个问题。这是添加按钮后面的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>
             } 
...

这就是FNtravel和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表中的。任何人都可以帮助我解决这个问题吗?提前非常感谢。

您可以尝试像这样更改控制器代码:

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);
}
  fintravel = db.FINtravel.Find(product.FINtravelID);//
  return PartialView("_MealPartial", fintravel);
 solves the problem, thanks for all helps in this thread