Отчитането на един ред от маркиране в .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('txtPayAmount').value = document.getElementById('drpdownPayPlan').value.replace(',', '');">
И така, с цялото ми уважение - без да ми давамепроповед за това как правилно да пренесете проект на WebForms към MVC (съжалявам за звученето на бунтовнически и некоопериращи тийнейджъри!) - как мога да разреша проблема, който имам с този ред на маркиране?
Отговори:
1 за отговор № 1Най- 0x800a138f
често се появява грешка в страницата ASPX, когато се опитвате да присвоите име на контрола от страна на сървъра (което не съществува в клиентската част поради присвояването на поведение на сървъра по подразбиране на сървъра) AutoID
) вместо името на клиента document.getElementById("drpdownPayPlan")
се завръща undefined
.
Има два начина да го разрешите:
Присвояване
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 и по-нови.употреба
<%= 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" })
Подобни проблеми: