2014-06-11 65 views
0

我一直在尋找關於如何在MVC項目中使用AJAX的信息,至今它只是讓我困惑了一下。我相信我現在還沒有太多實現一個Ajax ActionLink,它會導致數據庫條目發生變化,所以這種變化會反映到視圖中。但顯然,這段代碼現在的問題是錯誤的:ASP.NET MVC使用Ajax.ActionLink在數據庫中進行更改

public void MarkAsRead(Models.MessageModel message) 
    { 
     using (var db = new MessengerDBEntities()) 
     { 
      var dbMessage = db.Messages.FirstOrDefault(m => m.messageID == message.Id); 

      // Error handling 
      if (dbMessage == null) 
      { 
       ViewBag.ResultMessage = 
        "Something bad has happened with that message in the meantime. Please log out and in again."; 
       return; 
      } 

      dbMessage.messageRead = true; 
      db.SaveChanges(); 

      return; 
     } 
    } 

這是剃刀代碼:

@if (Model.Count() > 0) 
{ 
<br /><br /> 

string messageClass; 
foreach (var message in Model) 
{ 
    messageClass = message.Read ? "message-header" : "message-unread-header"; 

    <div class="message-container"> 
     <div class="@messageClass"> 
      @if (!message.Read) 
      { 
       <text>New </text> 
      } 

      From: @message.Sender 

      @if(!message.Read) 
      { 
       <span class="mark-read-span"> 
        @Ajax.ActionLink("Mark as read", "MarkAsRead", message, new AjaxOptions()) 
       </span> 
      } 
     </div> 

     <div class="message-mainbody"> 
      @message.Content 
     </div> 

     <div class="message-footer"> 
      At: @message.Timestamp.ToShortDateString() @message.Timestamp.ToShortTimeString() 
     </div> 
    </div> 

    <br /> 
} 
} 
else 
{ 
    <div id="no-messages-div">You haven't got any messages yet. :(</div> 
} 

在視圖中,我通過對象(接收的消息)的集合迭代。對於每條消息,我檢查它是否已被讀取,如果不是,則會有一條鏈接將其傾斜到讀取狀態。我也分配一個不同的類到div顯示基於wheather這是一個新的消息或不是消息:

@messageClass = message.Read ? "message-header" : "message-unread-header"; 

    <div class="message-container"> 
     <div class="@messageClass"> 
    ... 

我懷疑我用的是Ajax.ActionLink助手用錯AjaxOptions參數,但我沒在閱讀有關MSDN的解決方案之後,我們不會接近解決方案。 我該怎麼做呢?

+0

請顯示您的完整視圖 –

+0

查看太長的評論,編輯的問題。 – user2082422

+0

相關:http://stackoverflow.com/questions/5586327/how-to-use-ajax-actionlink – DaveParsons

回答

0

你可以在這裏做的是,嘗試使用消息的ID。

你應該知道,在MVC路線

所以定義爲控制器/動作/ ID,如果傳遞消息的ID來操作,那麼你可以在數據庫中更改消息狀態。 例如:

public ActionResult Message(long messageid) 
{ 
    // do you stuff to the message here in the database 
    // then return view or partial view whatever you want 
    return View(); 
} 

用於Ajax.ActionLink功能的正確語法叫它:

@Ajax.ActionLink("You Link Name", "ActionName", "ControllerName", new { ID = @Message.ID }, new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "update-div-ID", InsertionMode = InsertionMode.Replace }) 

在上述呼叫,我被返回的局部視圖,並顯示在股利ID爲「更新-div-ID」。你需要照顧這樣的AjaxOptions。

相關問題