【问题标题】:MVC .NET Refresh (Update) PartialView witout AJAX没有 AJAX 的 MVC .NET 刷新(更新)部分视图
【发布时间】:2015-06-13 02:19:51
【问题描述】:

我有一个带有部分视图的页面,其中包含带有添加按钮的 DevEx ComboBox 和 DevEx GridView(我省略了 GridView 代码)。页面在该部分视图中正常显示,只是我在刷新它时遇到了问题。

//_ProductAppsGridViewPartial
    <div class="form-horizontal">
    <h4>Apps</h4>
    @using (Html.BeginForm("AppsGridViewPartialAddNew", "Products", new { ProductID = ViewBag.ProductID }))
    {
        <div class="form-group">

            <h5>Add new App:</h5>
        @Html.DevExpress().ComboBox(settings =>
        {
            //..do some settings for ComboBox - some code omitted
            settings.Properties.ValueField = "ApplicationID";
            settings.Properties.TextField = "Name";
        }).BindList(Model.AppsNotInProduct).GetHtml()
            <input type="submit" value="Add" class="btn btn-default" />
        </div>
    }
</div>

我在控制器上执行了操作,将选定的应用程序添加到数据库中并返回具有相同(但已刷新)模型的 PartialView,但响应仅显示该部分视图。以下是更新数据库后返回 PartialView 的 Controller 操作的一部分:

public ActionResult ProductAppsGridViewPartialAddNew(int ProductID)
        {    
            //....update DB code - WORKS FINE
            ..
            var model = GetProductAppsPartialModel(ProductID);
            ViewBag.ProductID = ProductID;
            ViewBag.CanEdit = true;
            return PartialView("_ProductAppsGridViewPartial", model);
        }

是否可以在没有 AJAX 的情况下刷新部分视图,也许是我在上面写的?所以这里的主要问题是我得到了只显示部分视图的新页面。

【问题讨论】:

    标签: c# ajax model-view-controller asp.net-mvc-partialview


    【解决方案1】:

    要刷新页面的一部分,您需要使用 ajax 来仅替换所需的内容。您还需要使用 JavaScript 重新呈现部分中包含的 HTML。 MVC 带有一些 ajax 助手,或者你可以用 jquery 自己做。目前,操作结果正在按请求返回部分内容,但浏览器被告知它正在接收一个全新的页面并显示为这样。

    添加此link to Microsoft ajax 以显示您的一些选项。

    我会使用 jquery 并自己做这件事。还要记住,mvc 是一个服务器端框架,可以帮助您将 http 消息返回到浏览器。您正试图在客户端操作事物。实时客户端更新总是​​需要 ajax 来获取数据。替换 DOM 中的项目需要某种形式的 JavaScript。像 jquery 这样的库使这变得容易得多。看看 jquery ajax here.

    【讨论】:

    • 感谢@Luthervd。那么没有ajax和JS就没有办法部分刷新吗?我认为如果我返回部分视图,MVC 足够聪明,可以刷新部分视图的区域:)。我是 MVC 的新手,所以对于可能愚蠢的问题,我深表歉意。
    • 看我修改后的答案
    • 谢谢!我让它工作了!现在我有另一个问题,但这是 DevEx 的一个问题:ComboBox 和 Grid 是部分视图的一部分,当我从 CB 添加一些东西时,刷新后它在 Grid 中而不是 CB 中,这很好。但是当我在 DevEx Grid 中调用 Delete 链接时,它会接受部分视图并在警报对话框中显示它。我想 Grid 需要纯 Grid HTML 来执行它的操作...我试图让 CB 和 Grid 与生成一个局部视图同步,但没有运气...
    • 好的,很高兴它的工作。你现在问一个单独的问题,所以在另一个线程中问它,这样答案就不会混淆。如果它帮助您解决了问题,请随意将其标记为正确答案。
    • 我也得到了这个工作(因为使用了 DevExpress UI 扩展,所以它是特定的)。也许我应该再写一个帖子并发布我的解决方案?
    【解决方案2】:

    我认为您需要尝试此代码。 注意这里我们需要保持ajax调用来更新局部视图

    @using (Ajax.BeginForm("ActionName", "Controller", new { model = @Model.ID },
    new AjaxOptions
    {
    OnSuccess = "onSuccessRefresh "
    }))
    {
    <table>
    <td>
    </td>
    <td>    <input type="button" value="AddValue" /> </td>
    </table>
    }
    

    使用jquery处理代码onsuccess事件:-

    function onSuccessRefresh {
    // refersh your page or table
    }
    

    这不是完整的代码。但我认为它会对你有所帮助

    【讨论】:

      猜你喜欢
      • 2018-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多