如何获取 HTML 标签的值以发送 HTML.Action()
How can I get an HTML tag’s value to send an HTML.Action()
我有这些代码行:
<span
class="close-modal"
onclick="@Html.Action("SaveNotes", "CallCenter", new { activityId = item.callIdKey, noteText = "test1" })">
×
</span>
Notes: <br />
<textarea name="paragraph_text" rows="5" style="width:90%">
@item.NoteText
</textarea>
我想从 noteText
路由变量中替换 test1
并将其更改为 <textarea>
标记中的任何值。
有没有一种优雅的方法可以做到这一点而无需编写一大堆 jQuery 代码?
@Html.Action()
在页面处理期间(在服务器端)将部分视图呈现为 HTML 字符串。一旦页面被发送到浏览器,它就不再存在于标记中。你不能用这种方式做你想做的事。至少,我确定您不想在 <span>
标记的 onclick
事件中呈现局部视图。
为什么不为 <textarea>
标签使用 HTML 助手?然后,您可以获取用户在服务器代码中输入的任何值。您需要将表单 post 本身返回到 close-modal
元素上的服务器:
<span class="close-modal" onclick="$('form').submit()">×</span>
<form method="post" action="@Url.Action("SaveNotes", "CallCenter", new { activityId=item.callIdKey }">
Notes: <br />
@Html.TextArea("noteText", item.NoteText, new { rows="5", style="width:90%" })
</form>
这假设您已经 jQuery(ASP.NET 的常见假设)。如果您的页面上已有表单,则可能不需要 <form>
标签。
@gunr2171 在评论中指出,一旦 link 呈现给浏览器,动态更新它的唯一方法是通过某种形式的客户端脚本,通常是 JavaScript。对于您的情况,我建议您这样做:
<span
class="close-modal"
data-href-template="@Url.Action("SaveNotes", "CallCenter", new {activityId = item.callIdKey, noteText="{note}"})"
>
×
</span>
Note: As @HBlackorby notes in his answer, you shouldn't be using @Html.Action()
here; I assume you meant @Url.Action()
.
这样,您的 JavaScript 就有了一个模板 (data-href-template
),它可以使用明确定义的标记 ({note}
) 来替换它,而无需解析URL 以便识别先前替换的文本在哪里。否则,您可能最终会遇到键入例如CallCenter
到您的 <textarea />
中,它现在是一个您不能盲目替换的模棱两可的参考。或者,更糟糕的是,您键入 'a',它 确实 不明确。
如果您 已经在您的站点上使用 jQuery,则可能会使用以下方法进行实际替换的:
$(document).ready(function () {
$('span.close-modal').click(function() {
var noteInput = $('textarea[name="paragraph_text"]');
var encodedNote = encodeURI(noteInput.text());
var template = $(this).data("href-template");
var targetUrl = template.replace("{note}", encodedNote);
window.location.href = targetUrl;
});
});
您也可以在没有 jQuery 的情况下执行此操作,显然 — 如果您还没有依赖它,则应该这样做。重点是说明这不一定是 "giant block of jQuery code"。事实上,这只需几行就可以完成——而且可能应该如此。为了便于阅读,我特意将其分解为多个步骤和变量。
我有这些代码行:
<span
class="close-modal"
onclick="@Html.Action("SaveNotes", "CallCenter", new { activityId = item.callIdKey, noteText = "test1" })">
×
</span>
Notes: <br />
<textarea name="paragraph_text" rows="5" style="width:90%">
@item.NoteText
</textarea>
我想从 noteText
路由变量中替换 test1
并将其更改为 <textarea>
标记中的任何值。
有没有一种优雅的方法可以做到这一点而无需编写一大堆 jQuery 代码?
@Html.Action()
在页面处理期间(在服务器端)将部分视图呈现为 HTML 字符串。一旦页面被发送到浏览器,它就不再存在于标记中。你不能用这种方式做你想做的事。至少,我确定您不想在 <span>
标记的 onclick
事件中呈现局部视图。
为什么不为 <textarea>
标签使用 HTML 助手?然后,您可以获取用户在服务器代码中输入的任何值。您需要将表单 post 本身返回到 close-modal
元素上的服务器:
<span class="close-modal" onclick="$('form').submit()">×</span>
<form method="post" action="@Url.Action("SaveNotes", "CallCenter", new { activityId=item.callIdKey }">
Notes: <br />
@Html.TextArea("noteText", item.NoteText, new { rows="5", style="width:90%" })
</form>
这假设您已经 jQuery(ASP.NET 的常见假设)。如果您的页面上已有表单,则可能不需要 <form>
标签。
@gunr2171 在评论中指出,一旦 link 呈现给浏览器,动态更新它的唯一方法是通过某种形式的客户端脚本,通常是 JavaScript。对于您的情况,我建议您这样做:
<span
class="close-modal"
data-href-template="@Url.Action("SaveNotes", "CallCenter", new {activityId = item.callIdKey, noteText="{note}"})"
>
×
</span>
Note: As @HBlackorby notes in his answer, you shouldn't be using
@Html.Action()
here; I assume you meant@Url.Action()
.
这样,您的 JavaScript 就有了一个模板 (data-href-template
),它可以使用明确定义的标记 ({note}
) 来替换它,而无需解析URL 以便识别先前替换的文本在哪里。否则,您可能最终会遇到键入例如CallCenter
到您的 <textarea />
中,它现在是一个您不能盲目替换的模棱两可的参考。或者,更糟糕的是,您键入 'a',它 确实 不明确。
如果您 已经在您的站点上使用 jQuery,则可能会使用以下方法进行实际替换的:
$(document).ready(function () {
$('span.close-modal').click(function() {
var noteInput = $('textarea[name="paragraph_text"]');
var encodedNote = encodeURI(noteInput.text());
var template = $(this).data("href-template");
var targetUrl = template.replace("{note}", encodedNote);
window.location.href = targetUrl;
});
});
您也可以在没有 jQuery 的情况下执行此操作,显然 — 如果您还没有依赖它,则应该这样做。重点是说明这不一定是 "giant block of jQuery code"。事实上,这只需几行就可以完成——而且可能应该如此。为了便于阅读,我特意将其分解为多个步骤和变量。