【问题标题】:How to call and refresh a partial view in MVC 5 razor?如何在 MVC 5 razor 中调用和刷新局部视图?
【发布时间】:2017-06-13 17:40:29
【问题描述】:

当用户从下拉列表中选择一个值时,如何用新数据刷新必须为空的创建视图的部分视图?

我尝试了留言板上列出的一堆东西以及其他东西,但它只是深入到更多错误。我简直不敢相信 Web 表单中如此简单的事情在 MVC 中却很难做到。

我在 Chrome 和 IE 中都尝试过,但出现错误,所以我迷路了。对于共享文件夹中的部分视图,我有类似的东西:

<table cellpadding="1" border="1">
    .... // table header
    @foreach (SYSTEMX.Models.VUE_ISSUE_LIST item in ViewBag.IssuesList)
    {
        <tr>
           <td>@item.Issue</td>
       </tr>
    }
</table>

创建 cshtml 文件有这个:

<div class="col-sm-6">
    <div class="form-horizontal" style="display:none" id="PV_IssueList">
        @{ Html.RenderAction("UpdateIssuesList"); }
    </div>
</div>

Controller里面有类似这样的代码

[HttpGet]
public ActionResult UpdateIssuesList(int? VID)
{
    ViewBag.IssuesList = GetIssuesList(VID);
    return PartialView("UpdateIssuesList");
}

GetIssuesList(VID) 看起来与此非常相似,它位于 mvc 应用程序的控制器中

private List<VUE_ISSUE_LIST> GetIssuesList(int? VID)
{
    return db.VUE_ISSUE_LIST_.Where(i => i.ID == VID).ToList();
}

我收到此错误。我不知道这里发生了什么。

未找到部分视图“UpdateIssuesList”或没有视图引擎支持搜索到的位置。搜索了以下位置: ~/Views/CONTROLLERX/UpdateIssuesList.aspx
~/Views/CONTROLLERX/UpdateIssuesList.ascx
~/Views/Shared/UpdateIssuesList.aspx
~/Views/Shared/UpdateIssuesList.ascx
~/Views/CONTROLLERX/UpdateIssuesList.cshtml
~/Views/CONTROLLERX/UpdateIssuesList.vbhtml
~/Views/Shared/UpdateIssuesList.cshtml
~/Views/Shared/UpdateIssuesList.vbhtml

一位论坛用户发布了类似的解决方案,我想这对他有用,因为他打了一个绿色的复选标记,但对我根本不起作用:

Updating PartialView mvc 4

也试过这个:

refresh a partial view in mvc

也阅读了这篇文章,但它非常技术性,以至于我没有很好地理解它。

https://www.simple-talk.com/dotnet/asp-net/tips-and-tricks-about-razor-partial-views/

【问题讨论】:

  • 您需要使用 ajax 来动态更新视图(正如您包含的两个链接所示)。而且错误很明显-您还没有创建视图UpdateIssuesList.cshtml
  • 如果你的视图被命名为_IssuesListPartial.cshtml,那么它需要是return View("_IssuesListPartial");
  • 当然可以!该错误表示您尚未创建名称为 UpdateIssuesList.cshtml 的视图
  • 局部视图是一个视图(它只是没有布局)!为了响应客户端事件(例如,从下拉列表中选择一个选项),您需要 javascript,并且要更新 DOM,您需要 ajax 来调用返回部分视图的服务器方法
  • 嗨@007,您应该创建一个下拉列表(DropDownListFor)而不是一个表格,其值来自您的IssueList(来自您的控制器/name_view.HttpGet)。在它的 onclick 事件中,您必须将其称为包装形式,controller/name_view (HttpPost)。您将返回模型和控件的 ViewBag,它将呈现或不呈现您的局部视图(值来自模型并从控制器返回)。这个部分必须有另一个方法(controller/name_partialview),根据你传递给它的模型(RenderAction),让你渲染你的部分

标签: javascript asp.net-mvc asp.net-mvc-4 asp.net-mvc-3 razor


【解决方案1】:

我最终在从下拉列表中读取点击的代码中使用了一些称为 Ajax 的代码。获取所选项目的值并将值传递回

所有用于构建列表并将其发送到更新局部视图的控制器代码,如果那里有数据,它将传递局部视图

用更新列表来创建表单。

    $(document).ready(function () {
        $('#RES_VID').change(function ()
        {

            debugger;

            $.ajax(

                {
                    url: '@Url.Action("UpdatePartialViewList")',
                    type: 'GET',
                    data: { VID: $('#RES_VID').val() },

                    success: function (partialView)
                    {
                        $('#PV_WidgetList').html(partialView);
                        $('#PV_WidgetList').show();
                    }
                });

【讨论】:

  • 这是动态地执行您的操作的正确方法。 RenderAction 仅在第一次加载新内容。尽管如此,我会使用 done() 而不是 success 并且也会处理失败的回调。 $.ajax({ ... //你的参数除了成功 }).done(function (partialView) { $('#PV_WidgetList').html(partialView); $('#PV_WidgetList').show(); } ).fail(function(xhr, textStatus) { // 失败控制 }).always(function() { // 你总是想做什么 });
【解决方案2】:

够了吗?

$("#PV_IssueList").load("/controllerx/UpdateIssuesList?VID=1");

当您需要刷新时,调用此 jquery 行...或将其放入函数或任何事件中...例如 onclick='$("#PV_IssueList").load("/controllerx/UpdateIssuesList?VID=1");'

【讨论】:

  • 嗨@Performer,感谢您的回答。但我不认为 mvc 可以满足我的要求,我只需要放弃这个功能,因为我需要列表来根据下拉列表中选择的内容更新新数据。我想我可能把自己弄糊涂了。我确实对您添加到答案中的 VID=1 有疑问。 VID=1 只会继续发送 1 的 ID 对吗?如果它被硬编码为值 1,它如何知道我需要它来传递下拉列表中的 ID?
  • 对于 Performer 或任何知道的人还有一个关于此的问题...下划线?:onclick='$("#PV_IssueList").load("/controllerx/UpdateIssuesList?VID=1");谢谢
  • 对于第一部分,可能是您的页面与控制器中的方法名称不同。为了在 MVC 5 中实现刷新局部视图的部分,这种方法对我来说看起来是正确的。尝试此链接,以使其更完整。让我知道:stackoverflow.com/questions/38501116/…
  • @GileadKenzo 非常感谢先生...我会看看那个链接!
  • 我很高兴@007 :)
猜你喜欢
  • 2015-09-13
  • 1970-01-01
  • 2016-02-07
  • 2021-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-13
  • 1970-01-01
相关资源
最近更新 更多