Не могу найти переменную __doPostBack

  • Я программирую свой первый сайт asp.net
  • Для работы на айфоне сафари.

Мой код в теле default.aspx:

<div id="pnlLogin" class="panel" selected="true" >
    <h2>Login Details</h2>
    <form ID="fLogin" runat="server" class="panel" selected="true" > 
        <fieldset>
            <div class="row">
                <label>Name</label>
                <asp:TextBox id="txtUserName" runat="server" placeholder="Your username" />
            </div>
            <div class="row">
                <label>Password</label>
                <asp:TextBox id="txtPassword" textmode="Password" runat="server" placeholder="Your password" />
            </div>
        </fieldset>
        <asp:LinkButton id="btnLogin" class="whiteButton" text="Log me in!" runat="server" onclick="Login_Clicked" />
    </form> 
</div>

В серверном файле .cs default.aspx:

    protected void Login_Clicked(object sender, EventArgs e)
    {
        var username = txtUserName.Text;
        var password = txtPassword.Text;

        if (username == "masi" && password == "pass")
        {
            Response.Redirect("ControlPanel.aspx");
        }
    }

Исходный код полной страницы из DESKTOP Safari:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head><title>
    Cover Plus
</title><meta id="viewport" name="viewport" content="width=device-width, user-scalable=0, initial-scale=1.0" /><link href="iui/iui.css" rel="stylesheet" type="text/css" /><link title="default" href="iui/t/default/default-theme.css" rel="stylesheet" type="text/css" />
        <script type="application/x-javascript" src="iui/iui.js"></script>


        <link rel="apple-touch-icon" href="img/touch-icon-iphone.png" /><link rel="apple-touch-icon" sizes="72x72" href="img/touch-icon-ipad.png" /><link rel="apple-touch-icon" sizes="114x114" href="img/touch-icon-iphone4.png" /><link rel="apple-touch-startup-image" href="img/startup.png" />
    <script type="text/javascript">
        function login()
        {
            var isVerified = Verify();
            if (isVerified) {
                ident.setAttribute("placeholder", "valid");
            }
        }
    </script>
</head>
    <body>


<div class="toolbar">
    <h1 id="pageTitle">Login</h1>
</div>

<div id="pnlLogin" class="panel" selected="true" >
    <h2>Login Details</h2>
    <form method="post" action="Default.aspx" id="fLogin" class="panel" selected="true">
<div class="aspNetHidden">
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTY2NzcyMzEwM2Rk+CbfIXzzsip63MXaBjBxcQhbraDzpmAHkc6FH4cZIiE=" />
</div>

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['fLogin'];
if (!theForm) {
    theForm = document.fLogin;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>


<div class="aspNetHidden">

    <input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEWBALC/9DxDQKMrfuqAgKOsPfSCQKRnIq9D4GV4RtvQeooslP0bkLhJVOPoPu6Gt6b0rGrW9P8fPbK" />
</div> 
        <fieldset>
            <div class="row">
                <label>Name</label>
                <input name="ctl00$MainContent$txtUserName" type="text" id="MainContent_txtUserName" placeholder="Your username" />
            </div>
            <div class="row">
                <label>Password</label>
                <input name="ctl00$MainContent$txtPassword" type="password" id="MainContent_txtPassword" placeholder="Your password" />
            </div>
        </fieldset>
        <a id="MainContent_btnLogin" class="whiteButton" href="javascript:__doPostBack(&#39;ctl00$MainContent$btnLogin&#39;,&#39;&#39;)">Log me in!</a>
    </form> 
</div>

</body>
</html>

Проблема:

Он отлично работает на рабочем столе Safari / Chrome, я набираю masi / pass, нажимаю кнопку и перехожу на новую страницу, но на iPhone он выдает ошибку javascript в консоли и ничего не делает.

он говорит: Javascript: ошибка не определена ReferenceError: не удается найти переменную: __doPostBack

Я совершенно не знаю, что делать.

Обновление — Решение:

Я случайным образом удалил небольшой фрагмент javascript, который был у меня в заголовке (который почти ничего не сделал), и теперь он работает нормально.


person sprocket12    schedule 23.03.2012    source источник
comment
сколько у вас форм? ASP .Net WebForms работает только с одной формой. Также убедитесь, что у вас нет вложенных форм.   -  person Adrian Iftode    schedule 23.03.2012
comment
насколько мне известно, у меня есть одна форма на странице aspx, поэтому на default.aspx только 1 форма.   -  person sprocket12    schedule 23.03.2012
comment
Возможно, вы используете мастер-страницу, на которой эта функция может существовать, поскольку она показана в источнике, поэтому вам придется вручную добавить ее на свою страницу.   -  person Vishal Suthar    schedule 23.03.2012
comment
Ребят, смотрите мое обновление, проблема исправлена, если кто знает, почему ему не нравится этот javascipt в шапке, дайте знать.   -  person sprocket12    schedule 23.03.2012
comment
Что делает функция проверки? Может отсюда и возникла проблема.   -  person Alex Morales    schedule 23.03.2012


Ответы (1)


Проблема в том, что ASP.net по умолчанию обрабатывает неизвестные браузеры... такие как iPhone. Хотя было бы неплохо предположить, что неизвестные браузеры могут использовать javascript... вы можете указать, какие возможности есть у браузера, в разделе web.config или machine.config.

Посетите http://slingfive.com/pages/code/browserCaps/ для получения обновленной файл конфигурации browsercaps для asp.net

Вот пример случая для браузеров на основе GECKO (Netscape 6+, Mozilla/Firefox, ...)

Ссылка: этот вопрос и ответ.

<case match="^Mozilla/5\.0 \([^)]*\) (Gecko/[-\d]+)(?'VendorProductToken' (?'type'[^/\d]*)([\d]*)/(?'version'(?'major'\d+)(?'minor'\.\d+)(?'letters'\w*)))?">
                    browser=Gecko
                    <filter>
                            <case match="(Gecko/[-\d]+)(?'VendorProductToken' (?'type'[^/\d]*)([\d]*)/(?'version'(?'major'\d+)(?'minor'\.\d+)(?'letters'\w*)))">
                                    type=${type}
                            </case>
                            <case> <!-- plain Mozilla if no VendorProductToken found -->
                                    type=Mozilla
                            </case>
                    </filter>
                    frames=true
                    tables=true
                    cookies=true
                    javascript=true
                    javaapplets=true
                    ecmascriptversion=1.5
                    w3cdomversion=1.0
                    css1=true
                    css2=true
                    xml=true
                    tagwriter=System.Web.UI.HtmlTextWriter
                    <case match="rv:(?'version'(?'major'\d+)(?'minor'\.\d+)(?'letters'\w*))">
                            version=${version}
                            majorversion=0${major}
                            minorversion=0${minor}
                            <case match="^b" with="${letters}">
                                    beta=true
                            </case>
                    </case>
            </case>
person shrestha2lt8    schedule 31.08.2012