如何在我的视图中调用其他操作方法并创建列表

时间:2014-09-04 17:52:09

标签: asp.net asp.net-mvc asp.net-mvc-4 model

我有一个注册表格和一个网格(表格),用于查看所有记录。  但我不知道如何从不同的行动方法显示    我的代码如下所示

@using (Html.BeginForm("Create", "Bathrooms", FormMethod.Post))
   {   

     @Html.LabelFor(model => model.BathRoomDetails)
     @Html.TextBoxFor(model => model.BathRoomDetails)
     <br/>
      @Html.LabelFor(model => model.shortstring)
     @Html.TextBoxFor(model => model.shortstring)
     <br/>
   <button type="submit" class="btn btn-primary"/> Create</button> 
   <button type="submit"> View All</button>

}

和我的网格代码

<table>
   @foreach (var a in ViewBag.data as List<RealEstate.Models.BathRoomVM>)
            {
            <tr>
                <td>@a.BathRoomDetails</td>
                <td>@a.BActive</td>
            </tr>
            }
</table>

和我的控制器

 public ActionResult Create()
        {

            return View();
        }
    [HttpPost]
        public ActionResult Create(BathRoomVM Bathrooms)
        {
            ModelState.Clear();
            var realContext = new RealEstateDBContext();
            Bathroom Bathroomobj = new Bathroom();
            Bathroomobj.BathRoomDetails = Bathrooms.BathRoomDetails;
            Bathroomobj.shortstring = Bathrooms.shortstring;

            realContext.Bathrooms.Add(Bathroomobj);
            realContext.SaveChanges();
            ModelState.Clear();
            return View();
        }

       public ActionResult Get()
        {
             var realContext = new RealEstateDBContext();
            var rslt = (from bathroom in realContext.Bathrooms
                        select new BathRoomVM { BathRoomDetails = bathroom.BathRoomDetails, BActive = bathroom.BActive, Bcancelled = bathroom.Bcancelled }).Where(m => m.BActive == true && m.Bcancelled == false).ToList();
            ViewBag.data = rslt;
            return View();          

        }

我需要在点击ViewAll Button之后加载或显示网格..我已经尝试了不同的方法,但没有一个工作..请帮助我如何实现,我从最近2天陷入这个问题.. 我用了

public ActionResult Create()
        {
            var realContext = new RealEstateDBContext();
            var rslt = (from bathroom in realContext.Bathrooms
                        select new BathRoomVM { BathRoomDetails = bathroom.BathRoomDetails, BActive = bathroom.BActive, Bcancelled = bathroom.Bcancelled }).Where(m => m.BActive == true && m.Bcancelled == false).ToList();
            ViewBag.data = rslt;
            return View();
        }

我以这种方式获得结果,速度太慢(从数据库中搜索数据需要更多时间)..

[我需要调用其他操作方法并在我的视图中创建列表]

1 个答案:

答案 0 :(得分:0)

你真的需要摆脱使用viewbag。这是一个明显的迹象,表示您不习惯使用视图模型。话虽如此,您将需要使用jQuery,视图模型和部分视图。&#39;

以下是各个部分: 1.替换你的表区域是一个div,然后将保存将从局部视图返回的表格。

  1. 创建包含表逻辑的部分视图.cshtml文件,并使用也将从部分视图控制器操作返回的视图模型。

  2. 您需要在提交按钮上分配一个带有阻止默认操作的click事件,以防止它提交页面,而是调用部分视图控制器操作来更新表区域。

  3. 如果我有一些清晰度,我可能会多一点帮助。单击“创建”时,是否要更新表格或仅在单击“查看全部”时更新?

    还有其他一些想法。您可以使用jQuery在每次创建时在表中添加新行,然后使用jQuery ajax调用将浴室数据发送到服务器。

    另一个可能有用的功能是使用MemoryCache。它实现起来相当容易,但每次添加新浴室时都需要重置它,否则您将无法获得更新列表。

    如果您需要具体的信息,请与我联系。