[很抱歉问题很长,但有必要解释一下问题]
我正在开发一个学习网站,它应该向用户显示消息列表(如果有)。像这样的事情:
当用户按下关闭按钮时,该消息必须标记为“已读”,并且下次不应显示。以下代码用于生成这些消息:
<% 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/