2014-10-27 69 views
0

我是新來.NET和web開發的一般。我創建了一個表單來收集用戶的評論和/或文件附件。一切工作正常,但我想添加客戶端驗證,但它失敗時,我這樣做。使用Chrome的開發工具,我可以看到JavaScript被執行,但第一條語句失敗,說「無法讀取未定義的屬性值」。如果我刪除runat =「server」屬性,它可以正常工作,但我無法再從後面的代碼中訪問數據。在窗體runat =服務器的Javascript驗證

那麼,我有什麼選擇使JavaScript的工作?或者我正在以錯誤的方式保存數據?

aspx頁面:

<form id="commentForm" name="commentForm" runat="server" enctype="multipart/form-data" method="post" onsubmit="return validateCommentForm()"> 
    <p>Add Comment</p> 
    <textarea id="Comment" name="Comment" rows="4" class="with-100" runat="server" /> 

    <input id="FileAttachment" type="file" runat="server" /> 

    <input type="submit" id="SaveComment" class="red-button" value="Submit" /> 
</form> 

的javascript:

function validateCommentForm() 
{ 
    var x = document.commentForm.Comment.value; 
    var y = document.commentForm.FileAttachment.value; 
    if (x == '' && y == '') 
    { 
     alert("Either a commment or file must be supplied."); 
     return false; 
    } 
} 

C#:

protected void Page_Load(object sender, EventArgs e) 
     { 
      if (IsPostBack == true) 
      { 
       if (Comment.Value.Length > 0) 
       { 
        Insert.UserComment(Comment.Value); 
       } 

       HttpPostedFile UserFileAttachment = Request.Files[0]; 
       if (UserFileAttachment.ContentLength > 0) 
       { 
        Insert.FileAttachment(UserFileAttachment); 
       } 
      } 
     } 

在此先感謝。

回答

1

你可以使用jQuery,你可以通過名稱調用表單元素,如API所述。從JavaScript

$("input[name='Comment']").val(); 

要更新值(如果需要):

檢索值

$("input[name='Comment']").val('some Comment'); 

你也可以做到這一點通過ID(並根據您的樣品這應該工作)用下面的jQuery:

$("#Comment").val(); 

所以,你最終的JavaScript看起來像:

function validateCommentForm() 
{ 
    var x = $("#Comment").val(); 
    var y = $("#FileAttachment").val(); 
    if (x == '' && y == '') 
    { 
     alert("Either a commment or file must be supplied."); 
     return false; 
    } 
} 

我認爲從文件輸入框訪問文件名有些奇怪。查看文件選擇器jQuery documentation

+0

ClientIDMode屬性似乎只是ASP.NET控件的屬性,而不是HTML控件。所以這個解決方案不起作用。此外,我在運行時檢查頁面以獲取生成的ID,將現有的javascript與運行時ID一起使用,但它仍然無效。也許你可以提供一個jQuery解決方案的例子,因爲我不熟悉它。 – Lefka 2014-10-30 12:46:09

+0

呃,對不起。我只是重新檢查,並沒有意識到你沒有使用asp:form標籤。我現在將添加jQuery示例。 – tlbignerd 2014-10-30 15:16:37

+0

我仍然必須檢查元素並獲取運行時生成的名稱,並編輯jQuery函數以使用該名稱,但此解決方案確實有效。謝謝。 – Lefka 2014-10-31 19:58:04