亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將值從Javascript生成的按鈕傳遞給控制器???

如何將值從Javascript生成的按鈕傳遞給控制器???

C#
慕容708150 2021-03-29 18:15:12
我的代碼生成了一個表格,該表格的每一行末尾都有一個按鈕。當用戶單擊按鈕時,如何通過按鈕將屬性傳遞u.userEmail給控制器?發送到控制器的值是否為字符串?我的(無效的)嘗試:    <script>        $(document.body).append("waiting on async table to load<br>");        $(document).ready(function () {            $.getJSON("/Account/LoadClaimsTable", function (crewResponse) {                //returns a List<UserClaims>                $(document.body).append("<table>")                crewResponse.forEach(function (u) {                    var s = "";                    s+="<tr><td>" + u.userEmail + "</td>";                    u.userClaims.forEach(function (k) {                        console.log("added claim"+k.value);                        s += ("<td>" + k.type + "</td><td>" + k.value + "</td><td>" +                            "<input type=\"hidden\" name=\"userEmail\" value=\"`${u.userEmail}`\" />"+                            "<input type=\"button\" value=\"Create\" onclick=\"location.href='@Url.Action("EditClaims", "Account")'" />+"</td>");                    });                    s += "</tr>";                    $(document.body).append(s);                    s = "";                });                $(document.body).append("</table>")            });        });    </script>AccountController.cs包含:    public ActionResult EditClaims(string userEmail)    {        return View("StringView", userEmail);    }
查看完整描述

3 回答

?
繁花不似錦

TA貢獻1851條經驗 獲得超4個贊

您似乎采用的方法是Ajax,響應,渲染模板。話雖如此,您可能需要重新考慮您的方法。


步驟1。


建立范本


<template id="...">

     <button type="button" value="[action]" onclick="[url]">[text]</button>

</template>

第2步。


創建您的請求。


axios.get('...').then((response) => {

     // Retrieve template.

     // Replace bracket with response object model data.

     html += template.replace('[action]', response.action);

});

第三步


讓JavaScript呈現您的模板。


上面的代碼可以創建一個清晰簡潔的代碼庫,該代碼庫在范圍更改時更易于維護和擴展,而不是單個請求通過嵌入式標記執行更改。這種方法對我來說效果很好,而且我認為它將使您的疑難解答和定義變得更容易,因為控制器將對象移交給JavaScript,而不是標記/視圖數據。這將是對前端的更好的有限控制,并在將來進行明確的修改。


查看完整回答
反對 回復 2021-04-10
?
烙印99

TA貢獻1829條經驗 獲得超13個贊

有多種方法可以做到這一點。費利佩在上面的答案中提到了一個。這是使用不干擾js的另一種替代方法


將電子郵件作為html5數據屬性以及另一個我們將用于綁定點擊行為的屬性添加到按鈕。


u.userClaims.forEach(function (k) {

     // Add quotes as needed if you want multiline ( i just removed those)


     s += "<td>" + k.type + "</td><td>" + k.value + "</td><td>

           <input type='button' 

           clickablebutton data-email='" + u.email + "' value='Create'/></td>";

});

現在,在準備好文檔的過程中,將click事件處理程序綁定到那些元素(具有我們的custom屬性),并讀取data屬性并構建所需的url。


$(document).on("click", "input[clickablebutton]", function (e){


    var url = '@Url.Action("EditClaims", "Accounts")?useremail=' + $(this).data("email");

    window.location.href = url;


});

其他一些建議


使用適當的元素。按鈕勝于輸入(考慮輔助功能)

如果用于導航,請使用錨標記而不是按鈕。

內聯JavaScript并不是很好。讓瀏覽器解析您的標記而不會造成任何干擾,然后您可以稍后添加行為腳本(這是uobutrisive js方法的重點)


查看完整回答
反對 回復 2021-04-10
  • 3 回答
  • 0 關注
  • 213 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號