如何获取 HTML 标记的值以发送 HTML.操作()



我有这些代码行:

<span 
class="close-modal"
onclick="@Html.Action("SaveNotes", "CallCenter", new { activityId = item.callIdKey, noteText = "test1" })">
&times;
</span>
&nbsp;
Notes: <br />
<textarea name="paragraph_text" rows="5" style="width:90%">
@item.NoteText 
</textarea>

我想从noteTextroute 变量中替换test1,而是将其更改为<textarea>标签中的任何值。

有没有一种优雅的方法可以在不编写大量 jQuery 代码的情况下做到这一点?

@Html.Action()

在页面处理期间(在服务器端(将部分视图呈现为 HTML 字符串。一旦页面发送到浏览器,它就不再存在于标记中。你不能以这种方式做你想做的事情。至少,我确定您不想在<span>标签的onclick事件中呈现部分视图。

为什么不改用 HTML 帮助程序作为<textarea>标记?然后,您可以获取用户在服务器代码上键入的任何值。您需要使表单在close-modal元素上将自身发布回服务器:

<span class="close-modal" onclick="$('form').submit()">&times;</span>&nbsp;
<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注释中指出,一旦链接呈现到浏览器,动态更新链接的唯一方法是通过某种形式的客户端脚本,通常是JavaScript。在您的情况下,我建议您执行以下操作:

<span 
class="close-modal" 
data-href-template="@Url.Action("SaveNotes", "CallCenter", new {activityId = item.callIdKey, noteText="{note}"})"
>
&times;
</span>

注意:正如@HBlackorby在他的回答中指出的那样,您不应该在这里使用@Html.Action();我想你的意思是@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的情况下做到这一点——如果你还没有依赖它,就应该这样做。关键是要说明这不一定是"jQuery代码的巨大块"。事实上,这只需几行即可完成——而且可能应该如此。为了便于阅读,我故意将其分解为多个步骤和变量。

最新更新