/ / Как упорито да държите стар JavaScript обработващ събитие в уеб страница, пренесена към ASP.NET MVC? - javascript, asp.net-mvc, обработка на събития, пренасяне

Как да упорствате да поддържате стар редактор на събития в JavaScript на уеб страница, пренесена в ASP.NET MVC? - javascript, asp.net-mvc, обработка на събития, пренасяне

Отчитането на един ред от маркиране в .ASPX файл, както следва:

<asp:DropDownList ID="drpdownPayPlan" runat="server" onchange="javascript: document.getElementById("txtPayAmount").value = document.getElementById("drpdownPayPlan").value.replace(",", "");">

Мога ли да запазя вградения си JavaScript код на манипулатораи как? Разбирам, че има много други проблеми при пренасянето на приложение на WebForms към ASP.NET MVC, но бих искал да го запазя прост и просто да се съсредоточи върху тази линия.

Необработено изключение в ред 410, колона 115 в http://localhost:3835/Policy/QuotePayments?QN=XYZ-1234567&PN=ABCDEFGHIJ&AC=123456789

0x800a138f - Грешка при изпълнение на JavaScript: Не може да се получи „стойност“ на собствеността на неопределена или нулева референция

Когато се визуализира, изходният код всъщност се чете, както следва в ред 410 (разбирам причината за нарушените имена):

    <select name="ctl00$MainContent$drpdownPayPlan" id="MainContent_drpdownPayPlan" onchange="javascript: document.getElementById(&#39;txtPayAmount&#39;).value = document.getElementById(&#39;drpdownPayPlan&#39;).value.replace(&#39;,&#39;, &#39;&#39;);">

И така, с цялото ми уважение - без да ми давамепроповед за това как правилно да пренесете проект на WebForms към MVC (съжалявам за звученето на бунтовнически и некоопериращи тийнейджъри!) - как мога да разреша проблема, който имам с този ред на маркиране?

Отговори:

1 за отговор № 1

Най- 0x800a138f често се появява грешка в страницата ASPX, когато се опитвате да присвоите име на контрола от страна на сървъра (което не съществува в клиентската част поради присвояването на поведение на сървъра по подразбиране на сървъра) AutoID) вместо името на клиента document.getElementById("drpdownPayPlan") се завръща undefined.

Има два начина да го разрешите:

  1. Присвояване ClientIDMode="Static" за всеки сървър, който е включен (предполагах това txtPayAmount е TextBox управление на сървъра, ако използвате буквално поле за въвеждане на текст txtPayAmount както е).

    <asp:TextBox ID="txtPayAmount" runat="server" ClientIDMode="Static" />
    <asp:DropDownList ID="drpdownPayPlan" runat="server" ClientIDMode="Static" onchange="javascript: document.getElementById("txtPayAmount").value = document.getElementById("drpdownPayPlan").value.replace(",", "");">
    

    NB: ClientIDMode атрибут, наличен в .NET версия 4.0 и по-нови.

  2. употреба <%= drpdownPayPlan.ClientID %> да препращате идентификационния номер на клиентската страна, като запазвате контролни идентификатори в AutoID състояние (отново предположих txtPayAmount е TextBox контролирайте тук, оставете го, ако txtPayAmount е буквално текстово поле).

    <asp:DropDownList ID="drpdownPayPlan" runat="server" onchange="javascript: document.getElementById("<%= txtPayAmount.ClientID %>").value = document.getElementById("<%= drpdownPayPlan.ClientID %>").value.replace(",", "");">
    

Имайте предвид, че ви препоръчвам да разделите частта JS от сървърния контрол във функция и да извикате името на функцията, както е посочено по-долу:

<asp:DropDownList ID="drpdownPayPlan" runat="server" onchange="changePayAmount();">

<script type="text/javascript">
function changePayAmount() {
document.getElementById("<%= txtPayAmount.ClientID %>").value = document.getElementById("<%= drpdownPayPlan.ClientID %>").value.replace(",", "");
}
</script>

PS: В контекста на MVC id за всеки HTML помощен елемент може лесно да се дефинира в HTML атрибутите като част:

@Html.DropDownListFor(model => model.PayPlan, Model.PayPlanList as SelectList, new { id = "drpdownPayPlan" })

Подобни проблеми:

0x800a138f - Грешка при изпълнение на JavaScript: Не може да се получи 'value' на свойството на undefined или null reference

JavaScript runtime error: Не може да се получи 'value' на собственост на undefined или null reference