首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新数据后刷新Grid.Mvc

更新数据后刷新Grid.Mvc
EN

Stack Overflow用户
提问于 2015-04-22 23:48:48
回答 1查看 1.8K关注 0票数 3

我有这样的Grid Mvc:

代码语言:javascript
复制
    @helper CustomRendering(int id)
{
    @*<button class="btn btn-primary" onclick="location.href='@Url.Action("AcceptRequest", "TableRequest", new { id = id })'"> Accept</button>*@
    <button class="btn btn-primary" onclick="postAccept(@id)" id="@id"> Accept</button>
    <button class="btn btn-danger" onclick="setWindowId(@id)" id="@id">Decline</button>
}
@Html.Grid(Model).Columns(columns =>
                    {                                                
                        columns.Add(c => c.UserName).Titled("Name").Filterable(true);
                        columns.Add(c => c.DateStart).Titled("DateStart");
                        columns.Add(c => c.DateEnd).Titled("DateEnd");
                        columns.Add(c => c.Approved).Titled("Approved");
                        columns.Add(o => o.Id).Encoded(false).Sanitized(false)
                                    .Titled("Action")
                                    .RenderValueAs(o => CustomRendering(o.Id).ToHtmlString());                                           
                    }).WithPaging(10).Sortable(true)

我有这样的js脚本:

代码语言:javascript
复制
var tempId;        
        function setWindowId(id) {
            $("#dialog").dialog();
            tempId = id;
        }       
        function postMessage() {        
            var message = $('textarea#commentForDecline').val();
            var obj = {};
            obj.mes = $('textarea#commentForDecline').val();
            obj.mes = message;
            obj.id = tempId;

            $.ajax({
                type: "POST",
                url: "/TableRequest/DeclineRequest",            
                data: {'message': obj.mes, 'id': obj.id},
                success: function (msg) {                    
                }
            });       
            $("#dialog").dialog('close');
            $('textarea#commentForDecline').val('');
        }

        function postAccept(id){
            $.ajax({
                type: "POST",
                url: "/TableRequest/AcceptRequest",
                data: {'id': id },
                success: function (msg) {
                }
            });
        }

正如你所看到的,js函数我用来做按钮,你可能会在块@helper上看到。我只是将两个post ajax调用发送到MVC操作中。我有一个问题:必须刷新页面才能看到任何更新。有没有办法在DB更新后刷新Grid MVC?

代码语言:javascript
复制
public virtual ActionResult AcceptRequest(int id)
        {           
            using(var _db = new ApplicationDbContext())
            {
                Shedule shedule = _db.Shedules.SingleOrDefault(x => x.Id == id);
                shedule.IsDirectorApproved = true;
                _db.SaveChanges();
            }
            return RedirectToAction("Index");
        }

        [HttpPost]
        public virtual ActionResult DeclineRequest(string message, int id)
        {
            using (var _db = new ApplicationDbContext())
            {
                Shedule shedule = _db.Shedules.SingleOrDefault(x => x.Id == id);
                shedule.IsDirectorApproved = false;
                shedule.Message = message;
                _db.SaveChanges();
            }
            return RedirectToAction(MVC.TableRequest.ActionNames.Index);
        }
EN

回答 1

Stack Overflow用户

发布于 2021-09-02 19:02:22

好的,所以我通过以下方法做到了这一点:

HTML:

将你的网格放在一个div容器中,然后放在一个PartialView中,如下所示:

代码语言:javascript
复制
<div class="form-group" >
    @if (Model.myDataList != null)
    {
        <div id="myDataGrid">
            @Html.Partial("DisplayGridData", Model.myDataList);
        </div>                                                       
    }
</div>

您的DisplayGridData局部视图将如下所示:

代码语言:javascript
复制
@using GridMvc.Html

@model List<myProject.Models.MyGridData>

@Html.Grid(Model).Columns(column =>
 {
    column.Add(x => x.id).Titled("ID").Filterable(false);
    column.Add(x => x.name).Titled("Name").Filterable(false);
    column.Add(x => x.uniqueid).Titled("").Sanitized(false).Encoded(false).
    RenderValueAs(model => Html.Label("", "Delete", new { id = "btndelete",@class="btn btn-sm btn-success", onclick = "deleteContentFromDB(" + Convert.ToInt32(model.uniqueid) + ");" })
    .ToHtmlString()).Filterable(false). Sortable(false);
}).EmptyText("No data found").WithPaging(50).Sortable(false).Selectable(false)

对应的AJAX调用:

代码语言:javascript
复制
function refreshGrid() {
    var selectedID = $('#mySelector').find(":selected").val();
    var param = { 'selectedID': selectedID };
    var url = "~/Home/GetSelectedIDDataGridRender?main_id=1";
    $.get(url, param, function (data) {
        $('#myDataGrid').html(data);
    });
}

您的Controller方法将如下所示:

代码语言:javascript
复制
public ActionResult GetSelectedIDDataGridRender(int selectedID)
{
    List<MyGridData> myGridData = new List<MyGridData>();
    string AjaxCall = Convert.ToString(Request.QueryString["main_id"]);
    if (!string.IsNullOrEmpty(AjaxCall))
    {
        PropertyInfo isreadonly = typeof(System.Collections.Specialized.NameValueCollection).GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
        isreadonly.SetValue(this.Request.QueryString, false, null);
        this.Request.QueryString.Remove("main_id");

        dataaccess da= new dataaccess();
        myGridData = da.GetMyIDDataFromDB(selectedID);      
    }
    return PartialView("DisplayGridData", myGridData);
}

希望这能帮到别人。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29802705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档