将数据从一个视图传递到另一个视图-MVC

时间:2015-03-29 13:20:46

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

将数据从一个视图传输到另一个视图的最佳方法是什么?或者这是不好的做法?

原因是我想将@ model.count()从一个视图显示到主页,基本上是主页上所有视图的摘要。有tempdata,html.helper等,但我想知道最好和最可靠的方法。从而避免进一步的问题

这是有问题的代码

product.cshtml

<p>Total amount of Products = @Model.Count()</p>

我基本上希望在主页上显示相同的值

2 个答案:

答案 0 :(得分:0)

您必须刷新主页以获取实际“更新”的值。那时你也可以将值作为参数传回来,但我认为这不是你所希望的。

它可能不是最干净的解决方案,但我认为您希望主页上的文本可以通过一些javascript / jquery进行设置。

主页有这个片段:

<form id="PassBackVals"
<input type="hidden" name="ProductCount" value="0">
</form> 

<script>$( ".ProductCount" ).change(function() {
  $("$CurrentProductCount").text = $(".ProductCount").val;
});
</script>

并且在主要区域显示文本本身的区域将具有类似

的内容
<p> I'm currently showing <div id="CurrentProductCount">0</div> Products </p>

然后在你的product.cshtml中,你有

<script>$(".ProductCount").val = @Model.Count()
$( ".ProductCount" ).change();
</script>

答案 1 :(得分:0)

好的,我查看了其他方法并通过将viewbag后面的代码移动到下面的公共方法来解决了这个问题

    [OutputCache(NoStore = true, Location = OutputCacheLocation.Client, Duration = 10)]
    public ActionResult UpdateTotals()
    {
        JobController j = new JobController();
        ViewBag.JobCount = j.JobCount();

        ProductController p = new ProductController();
        ViewBag.ProductCount = p.ProductCount();

        return PartialView("UpdateTotals");
    }

然后我将viewbags添加到局部视图中并使用setinterval()javascript,

    <div id ="UpdateTotals">
        @{ Html.RenderAction("UpdateTotals");}
</div>

<script>
    setInterval("$('#UpdateTotals').load('/home/UpdateTotals')", 10000);
</script>

我能够不断刷新数据,而不会通过javascript通过视图提取数据。

希望这将有助于将来的任何人:)