2014-04-03 72 views
0

我在我的MVC應用程序中有一個ASPX視圖,它有一個FileSelector,一個標籤和一個按鈕,用於將FileSelector的選定文件名和大小放入標籤中(這是用於測試的目的;最終版本將發送FileSelector的FileBytes字節數組到SQL Server數據庫)。 Hoewver,當我按下按鈕時,頁面刷新,標籤保持不變。如何保持服務器按鈕不刷新ASPX視圖?

這裏是視圖代碼:「沒有文件尚未選擇」

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> 

<!DOCTYPE html> 

<html> 
<script runat="server" language="C#"> 
    void btnLoad_Click(Object sender, EventArgs e) 
    { 
     byte[] B = FileSelector.FileBytes; 
     lblStatus.Text = "File \"" + FileSelector.FileName + "\" has size " + B.Length; 
    } 
</script> 
<head runat="server"> 
    <title>ABMC - Add Photo (ASPX version) </title> 
</head> 
<body> 
    <div> 
    <form runat="server"> 
    <asp:FileUpload ID="FileSelector" runat="server" /> 
    <br /><br /> 
    <asp:Button ID="btnLoad" Text="Load" runat="server" OnClick="btnLoad_Click" /> 
    <br /><br /> 
    <asp:Label ID="lblStatus" runat="server">No file selected yet</asp:Label> 
    </form> 
    </div> 
</body> 
</html> 

當我選擇一個文件,然後點擊「Load」按鈕,頁面刷新,標籤讀取依舊,

我確實設法通過使用單獨的ASPX表單(代碼位於單獨的.aspx.cs文件中)而不是MVC視圖來工作(排序),但我必須將模型傳遞迴調用這個頁面的頁面,所以我寧願在View中做這個。

+2

如果這是一個MVC項目,那麼您將無法按照您所描述的方式訪問服務器控件:'

',''。你也不能執行'btnLoad_Click'方法。在我看來,這是一個WebForms項目 –

+0

如果這是一個webforms項目,您將刪除'runat =「server」'或在JQuery'$(「#btnLoad」)中捕獲它。click(function(){return false} )' – CSharper

+0

我不能讓它作爲一個單獨的視圖來工作,但我確實得到它作爲一個混合MVC/WebForms項目(它幾乎是我可以讓文件選擇器能夠讀取來自客戶端的文件沒有JavaScript抱怨)。 至於「將模型傳遞迴調用頁面」** THWACK ** - 我不需要傳遞模型 - 只需調用通過Request.QueryString的視圖並附加參數就好像它是一個URL 。 –

回答

1

也許您需要將「返回false」添加到btnLoad_Click調用中。嘗試使用return btnLoad_Click並從該函數返回false。