在MVC上渲染事件之后。可能?

时间:2011-04-11 14:20:20

标签: asp.net-mvc

HY。

我知道没有服务器控件和服务器端事件,但是......:

我的应用就像一个电子邮箱,未读项目以粗体显示。 enter image description here

好的...粗体项目是未读(isRead==false)。我想在没有任何点击的情况下将项目更新为(isRead=true) ..就在呈现页面之前。

我该怎么办? ASP.NET MVC中有没有办法,或者我必须使用JQuery吗?

在“视图”渲染后调用方法的最佳方法是什么?

Tks,伙计们!

2 个答案:

答案 0 :(得分:1)

如果您只是尝试更新视图,可以在将模型传递给视图之前更改模型,也可以在页面加载到浏览器后使用jQuery修改DOM。

另一方面,如果您尝试更改模型(并将其保留为已读取),则可以在将模型传递给之前查询模型时更新模型。查看,或者您可以使用JavaScript(jQuery)命中服务器上的链接,告诉您在读取时标记这些条目。

然而,正如R0MANARMY所说,仅仅是因为有人瞥了一眼您的参赛作品的标题,并不意味着他们已经承认它的存在。

这可以通过打开单个条目的链接来查看该条目的详细信息,并让您的逻辑标记当时读取的单个项目。

希望这有用:)

答案 1 :(得分:0)

一般来说,一旦你的行动完成了它的事情,并且你已经进入了视图,就没有回到代码(可以这么说)。有两种方法可以解决这个问题。

  1. 您可以创建要传递到视图的邮件列表的副本,并将原始邮件更改为isRead=true。我会说这是解决问题的首选方法,代码看起来像是:

    var viewMessages = from m in messages  
                       select new Message  
                       {  
                            // Fields you want to copy go here   
                       }
    
    viewMessages.ToList(); //This actually creates a list from the query
    
    // update the isRead property
    foreach( var m in messages ){
         m.isRead = true;
    }
    

    您现在有两个集合,一个可以传递给视图以正确呈现数据的原始数据的副本,另一个是原始集合,所有项目都使用isRead = true更新。

    < / LI>
  2. 从设计的角度来看,另一种选择并不是很好,但它能够实现相同的目标。您可以将代码直接更新到视图中,在下面的位置进行检查,如果已读取或不更改粗体。我假设你的观点看起来像是:

    @foreach(var message in View.Messages) {
       // some code
       <td @(message.isRead ? " class=\"selected\"" : null)
           message.Heading
           @{ message.isRead = true; } // Set it as read once it's been rendered
       </td>
    }