簡體   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