【问题标题】:MVC 4 Partial View refresh with list [closed]MVC 4部分视图刷新列表[关闭]
【发布时间】:2015-12-09 23:37:00
【问题描述】:

我已使用此link 在我一直在制作的仪表板上应用部分刷新。

我现在想弄清楚的是如何让它通过列表而不是随机化。我相信我必须找到一种方法来来回发送模型列表的 ID 值,以便将其递增一。

**问题是如何让网站按顺序而不是随机地遍历模型列表。

任何帮助都会非常感谢!

【问题讨论】:

  • 发布指向非现场参考的链接没有帮助。请修改您的问题以包含所有相关代码。

标签: c# asp.net asp.net-mvc asp.net-mvc-4


【解决方案1】:

在您的示例中,模型定义为

  public class  Model    
    {
         public int ID { get; set; }
         public string Name { get; set; }
         public string ImageUrl { get; set; }
    }

已经有一个标识符。因此,要将这个标识符从客户端发送到服务器端,您应该在表单中定义变量。所以你应该将部分视图更改为

@model  PartailViewAutoRefresh.Models.Model
@Html.HiddenFor(model => model.ID)
<img src="@Model.ImageUrl" alt="@Model.Name" title="@Model.Name" width="150px" height="150px"/>

现在应该调用 ajax

<script type="text/javascript">
    $(function () {
         var contributorId = $("#ID").val();
         setInterval(function () { $('#contributors').load('@Url.Action("GetContributor", "Home" })?id='contributorId); }, 3000); // every 3 sec
    });
</script>

服务器应该将操作更改为

  public ActionResult GetContributor(int id)

您可以从您的示例中做出的一些更改是 1.您应该将GetContributor更改为HttpPost

[HttpPost]
public ActionResult GetContributor(int id)   
  1. 而不是调用 HttpGet 操作的 .load 方法,因此从安全角度来看,您应该将其更改为 HttpPost;从客户端使用 $.ajax 或 $.post。

      setInterval(function () { $.ajax({
          url: "@Url.Action("GetContributor", "Home"),
          method: "POST",
          data: { id : contributorId  },
          dataType: "html",
          success : function(data) {
              $('#contributors').html(data);
          }
        });
    }, 3000); 
   });

【讨论】:

  • 我试过这个解决方案,但程序不喜欢这行代码; setInterval(function () { $('#contributors').load('@Url.Action("GetContributor", "Home", new { @id =contributorId })'); }, 3000); // 每 3 秒
  • 更新了代码行。另外,您尝试过推荐的方法吗?
  • 感谢这工作。我也会尝试您的其他方法,但很高兴其他方法现在正在工作!
【解决方案2】:

您的视图带有 PartialView,必须通过单击按钮来更新:

<div class="target">
    @{ Html.RenderAction("UpdatePoints");}
</div>

有一些方法可以做到这一点。例如,您可以使用 jQuery:

<script type="text/javascript">
    $(function(){    
        $('.button')click(function(){        
            $.post('@Url.Action("PostActionToUpdatePoints", "Home")').always(function(){
                $('.traget').Load('/Home/UpdatePoints');        
            })        
        });
    });        
</script>

PostActionToUpdatePoints 是带有 [HttpPost] 属性的 Action,用于更新点

如果您在操作 UpdatePoints() 中使用逻辑来更新点,可能是您忘记为其添加 [HttpPost] 属性:

[HttpPost]
public ActionResult UpdatePoints()
{    
    ViewBag.points =  _Repository.Points;
    return PartialView("UpdatePoints");
}

链接:see here

【讨论】:

  • 我不想在按下按钮时进行刷新。仪表板将有一组数据,它希望部分视图自动迭代。将会有另一个函数会定期更新此信息。
  • 这和一些改变是一样的。但是这样做的方法是一样的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-26
  • 2015-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多