2011-08-20 5 views
0

Cette solution fonctionne, mais je pense qu'il peut beaucoup mieux se faireComment améliorer la solution

JQuery:

$('#addMessage').click(function() { 
    var textMessage = $('#ticketMessage').val(); 
    var isInternal = $('#isInternal')[0].checked; 
    var ticketID = $('#TicketID').val(); 
    $.ajax({ 
     url: '/Ticket/AddMessage', 
     type: 'POST', 
     data: { textMessage: textMessage, isInternal: isInternal, ticketID: ticketID }, 
     success: function (data) { 
      var tbody = $('#allMessages').children()[0]; 
      tbody.innerHTML = tbody.innerHTML + data; 
      $('#ticketMessage').val(""); 
      $('#isInternal')[0].checked = false; 
     } 
    }); 
}); 
contrôleur

public string AddMessage(string textMessage, bool isInternal, int ticketID) 
     { 


    Message message = new Message(); 
     message.IsInternal = isInternal; 
     message.TicketMessage = textMessage; 
     message.TicketID = ticketID; 
     DateTime created=DateTime.Now; 
     message.CreatedDateTime = created; 
     message.PersonID = AppSecurity.Security.GetPersonID(Session); 

     var personRepository = new PersonRepository(_context); 
     MessageRepository messageRepository = new MessageRepository(_context); 
     messageRepository.Add(message); 
     _context.SaveChanges(); 

     string relSrc = (personRepository.GetById((int)message.PersonID) as Employee).Image; 
     string source = ""; 
     string isInternalStr = ""; 
     if (message.IsInternal) 
      isInternalStr = "Internal"; 
     if (message.Person is Employee) { source = relSrc != null ? "../../Images/TicketFiles" + relSrc.Replace('\\', '/') : "../../Images/TicketFiles/Employees/no-profile.png"; } 
     String response = "<tr><td style=\"width: 25%\" valign=\"top\"><table><tr>" 
      + "<td><img src=\""+source+"\" alt=\"\" style=\"height: 60px\"/></td>" 
      + "</tr><tr><td>" 
      + AppSecurity.Security.GetUserFullName(Session) 
      + "</td></tr><tr><td>" 
      + created.ToString("dd.MM.yyyy") + " - " + created.ToString("HH:mm:ss") 
      + "</td></tr></table></td><td style=\"width: 75%; padding:0px;\" valign=\"top\"><table style=\"width: 100%; height: 130px\" cellspacing=\"0\" cellpadding=\"0\">" 
      + "<tr><td style=\"height: 20px; padding: 0px\">" + isInternalStr + "</td></tr><tr><td valign=\"top\">" + message.TicketMessage + "</td><tr></table></td></tr>"; 

     return response; 
    } 

Répondre

1

Votre contrôleur doit être de type ActionResult et comme mr.nicksta dit, devrait être en vue.

public ActionResult AddMessage(string textMessage, bool isInternal, int ticketID) 
{ 
    ... 
    return View(message); 
} 

puis créer une vue avec le même que le contrôleur, fortement typé avec Message.

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<Message>" %> 

Où vous créez l'affichage. Vous pouvez même faire cela comme une vue partielle pour qu'il puisse être inclus dans d'autres pages plus facilement.

2

Au lieu de générer le balisage dans le contrôleur pourquoi ne pas le faire côté client dans le JavaScript? Votre contrôleur ne doit pas se préoccuper de balisage

+0

Je ne sais pas comment le faire ... Je sais qu'il devrait, mais je ne sais pas comment? Si vous pouvez me montrer comment? – Ivan

+0

S'il vous plaît envoyez-moi un exemple, comment puis-je faire cela ?? – Ivan

2

Il me semble que vous pouvez bénéficier beaucoup en utilisant jquery templates