【问题标题】:How can I refresh just a Partial View in its View?如何在其视图中仅刷新部分视图?
【发布时间】:2016-11-24 20:41:39
【问题描述】:

我做错了什么?就是这个想法……

索引视图

<div class="col-lg-12 col-md-12 col-xs-12">
    @Html.Partial("PartialView", Model)
</div>

控制器

public ActionResult PartialView()
{
    return PartialView("PartialView");
}

[HttpPost, ValidateInput(false)]
public ActionResult POSTPartialView(string param1)
{
    return PartialView("PartialView");
}   

PartialView 有一个表单。 我第一次进入 Index,PartialView 工作,但第二次,在 POST 调用(来自 PartialView 内部的表单)之后,我只需要从 Index 中渲染 PartialView。

所以要修复它,我正在做下一个:

[HttpPost, ValidateInput(false)]
public ActionResult POSTPartialView(string param1)
{
    return View("Index");
}   

这行得通。我再次渲染所有索引(在 POST 之后进行更改)。但是我刷新了所有页面,所以我丢失了一些 CSS 元素(例如折叠的手风琴)。

我应该使用 Ajax 只刷新包含 PartialView 的 div 吗?

谢谢大佬。

已编辑:

@using (Html.BeginForm("PartialView", "Controller", FormMethod.Post, new { @class = "form-inline", role = "form" }))
{
    <div class="form-group col-lg-3 col-md-3 col-xs-3">
        <label for="DATA">DATA:</label>
        <input type="text" class="form-control pull-right" name="DATA">
    </div> 
    <button type="submit" class="btn btn-primary pull-right">Get Data</button>
}

【问题讨论】:

  • 您能向我们展示您的表单声明吗?
  • 为什么相关?一个标准的……@André Figueiredo
  • 因为它可以是普通形式,也可以是 ajax 形式.. 你没有提供完整的信息
  • 我还没找到你。该表单是一个普通的表单,然后您可以通过 Ajax、控制器、...等等来调用它...无论如何,我进行了编辑以防万一我错过了什么...谢谢@André Figueiredo

标签: c# asp.net-mvc razor asp.net-mvc-partialview


【解决方案1】:

好吧,我阅读了解决方案 (Auto Refresh Partial View)。我正在发布它,希望能澄清问题:

index.html

<div class="col-lg-12 col-md-12 col-xs-12" id="divPartial">
    @Html.Partial("PartialView", Model)
</div>
<script type="text/javascript">
  $("#buttonForm").click(function(e){
    $('#form').submit();
    $('#divPartial').load('/PartialController/PartialView'); 
  });
</script>

部分控制器

public ActionResult PartialView()
{
    // DO YOUR STUFF. 
    return PartialView("PartialView", model);
}

[HttpPost, ValidateInput(false)]
public EmptyResult POSTPartialView(string param1)
{
    // DO YOUR STUFF AFTER SUBMIT.
    return new EmptyResult();
} 

【讨论】:

  • 你也可以像这样向控制器发送参数:$('#divPartial').load('/PartialController/PartialView?itemId=2095');
  • 谢谢@robbpriestley。我没有尝试这种方法......干杯队友
【解决方案2】:

部分视图是为了在不同的地方重用代码的某些部分。当一个页面被提交然后视图被重新加载,如果你想避免页面刷新,你可以使用 ajax。

查看代码

$.ajax({
    type: "POST",
    url: '@Url.Action("ControllerName", "ActionName")',
    contentType: "application/json; charset=utf-8",
    data: { data: "yourdata" },
    dataType: "json",
    success: function(recData) { alert('Success'); },
    error: function() { alert('A error'); }
});

控制器代码

public JsonResult ActionName(string yourdata)
{
   return Json(p); \\ where p is you want to return
}

【讨论】:

  • 最好将部分视图呈现的 HTML 返回给 AJAX 调用者。 public ActionResult ActionName() { var viewModel = new MyViewModel(); return PartialView("_MyParitalView", viewModel); }。要接收 HTML,请在 ajax 调用中指定默认的 contentType: "application/x-www-form-urlencoded; charset=UTF-8", dataType: "html"
【解决方案3】:

部分视图旨在重用不同视图中的某些部分代码,但是当您提交表单时,会重新加载整个视图。

如果您不想重新加载,则必须使用 AJAX 提交表单。

【讨论】:

  • 谢谢。我如何加入两者?如果你不介意,你能给我一个简单的例子吗? @Borja Tur
  • 您可以使用 ajax 请求在视图中添加纯 javascript 函数,但为了简单起见,我建议为此使用 jquery。让我在 jquery 中寻找 ajax 调用的工作示例。
  • 感谢@Borja Tur。我以前使用过 Ajax,但是当我尝试将它与 Partial View 集成时,我遗漏了一些东西......如果你愿意,你可以为我提供一个非常基本的例子,我可以从那里开始工作......即使通过我的简单示例(我的问题代码)。干杯博尔哈!
  • 这里你已经解释了一个基本的示例代码cmatskas.com/update-an-mvc-partial-view-with-ajax 只重新加载部分视图我希望现在有用,如果没有,今天下午我可以在github上写一个非常基本的项目和一个工作示例并在这篇文章中链接到你
  • @EliasMP 这里有一个工作示例github.com/borjatur/TestPartialView
猜你喜欢
  • 2013-07-20
  • 2012-08-22
  • 2014-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多