javascript - 在 ASP.NET MVC View 页面中使用 C# 生成 javascript 是否正确?

标签 javascript jquery asp.net-mvc viewpage

[很抱歉问题很长,但有必要解释一下问题]

我正在开发一个学习网站,它应该向用户显示消息列表(如果有)。像这样的事情:

alt text

当用户按下关闭按钮时,该消息必须标记为“已读”,并且下次不应显示。以下代码用于生成这些消息:

<% foreach (var m in Model.UserMessages) { %>
    <div class="um" id="m<%=Html.AttributeEncode(m.ID) %>">
        <p class="mh"><%= Html.Encode (String.Format ("From {0} ({1})", m.From, m.Sent)) %></p>
        <p><%= Html.Encode (m.Text) %></p>
        <% using (Html.BeginForm ("CloseMessage", "Home", new { id = m.ID })) { %>
            <input type="submit" value="Close<%= Html.AttributeEncode (m.ID) %>" id="c<%= Html.AttributeEncode (m.ID) %>"/>
        <% } %>
    </div>
<% } %>

之后,按照指南,我在 Controller 中添加了对 http post 方法的支持,该方法将消息标记为已读,然后刷新 View (以处理禁用的 JavaScript):

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult CloseMessage (int id) {
    using (var dl = new DL ()) {
        dl.MarkAsRead (id);
    }

    if (Request.IsAjaxRequest ()) {
        return new EmptyResult ();
    }
    else {
        return RedirectToAction ("Index");
    }
}

然后我想添加 JavaScript 支持,以便只有消息消失(使用 jQuery)。但问题是我正在以编程方式生成按钮和消息。

因此最终在 View 页面中出现了看起来很奇怪的 JavaScript 代码:

<script type="text/javascript">
    $().ready(function() {
        <% foreach (var m in Model.UserMessages) { %>
        $("#c<%=Html.AttributeEncode (m.ID) %>").click(function(event) {
            $.post("Home/CloseMessage/<%=Html.AttributeEncode (m.ID) %>");
            $("#m<%=Html.AttributeEncode (m.ID) %>").slideUp("slow");
            event.preventDefault();
        });
        <% } %>
    });
</script>

这基本上是在 C# 循环中创建 javascript 代码,该代码实际上可以工作,但对我来说太多了,无法消化。有没有更好的方法来做到这一点?

最佳答案

您可以创建一个将元素 ID 作为参数的 JavaScript 函数:

function myFunction(ID) {
    $.post("Home/CloseMessage/" + ID);
    $("#m" + ID).slideUp("slow");
}

并且:

<% foreach (var m in Model.UserMessages) { %>
<div class="um" id="m<%=Html.AttributeEncode(m.ID) %>">
    <p class="mh"><%= Html.Encode (String.Format ("From {0} ({1})", m.From, m.Sent)) %></p>
    <p><%= Html.Encode (m.Text) %></p>
    <% using (Html.BeginForm ("CloseMessage", "Home", new { id = m.ID })) { %>
        <input type="submit" value="Close<%= Html.AttributeEncode (m.ID) %>" 
        id="c<%= Html.AttributeEncode (m.ID) %>" 
        onclick="myFunction('<%=Html.AttributeEncode(m.ID)%>')"/>
    <% } %>
</div>
<% } %>

关于javascript - 在 ASP.NET MVC View 页面中使用 C# 生成 javascript 是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1200067/

相关文章:

javascript - 在 main.js 文件中使用 getScript 来减少加载大小

javascript - 重置超时 JavaScript

jquery - ASP.NET MVC 2 使用 jQuery 加载部分 View - 无客户端验证

asp.net - 我可以在不使用 Membership 的情况下使用 user.IsInRole 吗?

asp.net - 尝试为 Medium Trust 进行开发是否会失败?

javascript - 使用 $.getJSON 的问题

javascript - 包含构造函数的对象的闭包编译器注释

javascript - 当数据类型为 url 时,jqgrid setColProp 不起作用

javascript - 说明为什么我的 JS 闭包没有正确返回?

jquery - 在 ul list jquery 中找到每个 div