如何改进解决方案

时间:2011-08-20 12:53:04

标签: asp.net-mvc asp.net-mvc-2

此解决方案有效,但我认为可以做得更好

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;
        }
    });
});

控制器

  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;
    }

3 个答案:

答案 0 :(得分:2)

而不是在控制器中生成标记,为什么不在JavaScript中使用客户端?您的控制器不应该关注标记

答案 1 :(得分:2)

在我看来,使用jquery templates

可以带来很多好处

答案 2 :(得分:1)

您的控制器应该是ActionResult类型,并且mr.nicksta说,应该在视图中。

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

然后创建一个与控制器相同的视图,并使用Message进行强类型化。

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

创建显示的位置。你甚至可以这样做,因为它可以更容易地包含在其他页面中。