繁体   English   中英

如何获取 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" })">
  &times;
</span>
&nbsp;
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 帮助程序呢? 然后您可以获取用户在服务器代码中输入的任何值。 您需要让表单在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 以识别先前替换的文本的位置. 否则,您可能最终会遇到这样的情况:在您的<textarea />键入例如CallCenter ,它现在是一个模糊的引用,您不能盲目地替换它。 或者,更糟糕的是,你输入了'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 代码块”。 事实上,这可以在短短几行中完成——而且可能应该如此。 为了可读性,我特意把它分解成多个步骤和变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM