简体   繁体   中英

mvc 2 upload with vb.net

I didn't find any answer on web with vb.net (I find millions of samples with c#)

I translated a sample controller to vb.net but doesn't upload

My ResimController.vb

<AcceptVerbs(HttpVerbs.Post)>
Public Function Anasayfa(ByVal forms As FormCollection) As ActionResult

    Dim errors As Boolean = False
    If String.IsNullOrEmpty(forms("Resimx")) Then
        errors = True
        ModelState.AddModelError("Resimx", "error")
    Else
        Dim sFileName As String = forms("Resimx")

        Dim file = Request.Files("Resimx")
        ''file' is always null, and Request.Files.Count is always 0 ??? 
        If file IsNot Nothing Then 'This line always returns Nothing
            Dim buf As Byte() = New Byte(file.ContentLength - 1) {}
            'do stuff with the bytes 
            file.InputStream.Read(buf, 0, file.ContentLength)
        Else
            errors = True
            ModelState.AddModelError("Resimx", "error")
        End If
    End If
    If errors Then
        Response.Write("Failed")
        Return View()
    Else
        Response.Write("Success")
        Return View()
    End If

End Function

The Anasayfa.aspx page

<%@ Page Title="" Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="asp" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Anasayfa
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <h2>Anasayfa</h2>
    <form method="post" enctype="multipart/form-data" action="">
        <%: Html.ValidationSummary(True)%>
        <%: Html.ValidationMessageFor(Function(model) model)%>
        &nbsp;
        <input id="Resimx" name="Resimx" type="file" />
        <br />
        <br />
        <input id="Submit1" type="submit" value="submit" />
        &nbsp;
    </form>
</asp:Content>

The AjaxControlToolkit registration in the beginning of your view and the missing action attribute on your form raise some serious suspicions about your design. It seems that you are trying to use server side controls which is a no-no in ASP.NET MVC because they rely on viewstate and postback model.

Here's an example of how you could implement file uploads in MVC:

Controller:

<HandleError()> _
Public Class HomeController
    Inherits System.Web.Mvc.Controller

    Function Index() As ActionResult
        Return View()
    End Function

    <HttpPost()>
    Function Index(ByVal Resimx As HttpPostedFileBase) As ActionResult
        If Not Resimx Is Nothing Then
            ' A file has been selected => do something with the uploaded file
        End If
        Return View()
    End Function
End Class

View:

<%  Using Html.BeginForm("Index", "Home", Nothing, FormMethod.Post, New With { .enctype = "multipart/form-data" })%>
    <input id="Resimx" name="Resimx" type="file" />
    <input type="submit" value="Upload" />
<% End Using %>

I am removing master page from project and uploading. I dont know what is wrong in my master page.. This is my master page..

----------- Problem Fixed : added enctype="multipart/form-data" to form1 -------------

<%@ Master Language="VB" Inherits="System.Web.Mvc.ViewMasterPage" %>


<%-- The following line works around an ASP.NET compiler warning --%>
<%: ""%>

<!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">
<head runat="server">
    <title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title>
    <link href="../../Content/Site.css" rel="stylesheet" type="text/css" />
    <link rel="stylesheet" type="text/css" href="../../Content/jkmegamenu.css" />

    <script src="../../Scripts/jquery-1.4.1.js" type="text/javascript"></script>

    <script type="text/javascript" src="../../Content/jkmegamenu.js"></script>

    <script type="text/javascript">

        //jkmegamenu.definemenu("anchorid", "menuid", "mouseover|click")
        jkmegamenu.definemenu("megaanchor", "megamenu1", "mouseover")
        jkmegamenu.definemenu("Ataturk", "Ataturk1", "mouseover")
</script>
    <style type="text/css">

        .style2
        {
            width: 220px;
            height: 237px;
        }

    </style>
    </head>

<body>
    <form id="form1" enctype="multipart/form-data" runat="server">
    <center>
<div id="banner" align="center" dir="ltr" style="border-width: 0px; width: 1000px; height: 180px; top: 0px; position: relative;">
    <img alt="Banner" src="../../Content/banner3.jpg" /></div>
<div id="menuler" align="center" 
            style="border-width: 0px; width: 1000px">
<table class="style1">
        <tr>
            <td width="143px">
                <%: Html.ActionLink("Anasayfa", "Anasayfa", "Home")%></td>
            <td width="143px">
                <%: Html.ActionLink("Okulumuz", "Anasayfa", "Okulumuz", New With {.id = "megaanchor"})%></td>
            <td width="143px">
                <%: Html.ActionLink("Personel", "Anasayfa", "Personel")%></td>
            <td width="143px">
                <%: Html.ActionLink("Basında Biz", "Anasayfa", "Basin")%></td>
            <td width="143px">
                <%: Html.ActionLink("Aktiviteler", "Anasayfa", "Aktiviteler")%></td>
            <td width="143px">
                <%: Html.ActionLink("Atatürk Köşesi", "Anasayfa", "Ataturk", New With {.id = "Ataturk"})%></td>
            <td width="143px">
                <%: Html.ActionLink("İletişim", "Anasayfa", "Iletisim")%></td>
        </tr>
    </table>

</div>
<div align="center" 
            style="width: 1000px; border-width: 0px; ">

 <table style="width: 100%">
  <tr>
   <td style="width:267px" valign="top" align="left">
            <asp:Calendar ID="Calendar1" runat="server" BackColor="White" 
                    BorderColor="#3366CC" BorderWidth="1px" CellPadding="1" 
                    DayNameFormat="Shortest" Font-Names="Verdana" Font-Size="8pt" 
                    ForeColor="#003399" Height="200px" Width="220px" EnableViewState="False" 
                    VisibleDate="2010-10-24">
                    <DayHeaderStyle BackColor="#99CCCC" ForeColor="#336666" Height="1px" />
                    <NextPrevStyle Font-Size="8pt" ForeColor="#CCCCFF" />
                    <OtherMonthDayStyle ForeColor="#999999" />
                    <SelectedDayStyle BackColor="#009999" Font-Bold="True" ForeColor="#CCFF99" />
                    <SelectorStyle BackColor="#99CCCC" ForeColor="#336666" />
                    <TitleStyle BackColor="#003399" BorderColor="#3366CC" BorderWidth="1px" 
                        Font-Bold="True" Font-Size="10pt" ForeColor="#CCCCFF" Height="25px" />
                    <TodayDayStyle BackColor="#99CCCC" ForeColor="White" />
                    <WeekendDayStyle BackColor="#CCCCFF" />
                </asp:Calendar>

                <br />
                <div class="meb">

  <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" 
                        codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" 
                        class="style2">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="http://www.meb.gov.tr/haberler/xml/swf/145-180/145-180-13.swf?param=0" />
<param name="quality" value="high" />
<embed src="http://www.meb.gov.tr/haberler/xml/swf/145-180/145-180-13.swf?param=0" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="220" height="236" allowscriptaccess="sameDomain"></embed>
</object> 


          </div>
                </td>
   <td valign="top" align="left">
                <asp:ContentPlaceHolder ID="MainContent" runat="server" />
            </td>
   <td style="width:267px" valign="top" align="left">E-Okul veli bilgilendirme sistemi<br />

            <a target="_blank" href="https://e-okul.meb.gov.tr/Ilkogretim/Veli/iov00001.aspx"><img src="../../Content/e-okul.jpg" alt="E-Okul" /></a><br />
            <br />
            <br />
            MEB Internet TV<br />

            <a target="_blank" href="http://internettv.meb.gov.tr/"><img src="../../Content/meb_tv.jpg" alt="Meb TV" /></a><br />
            </td>
  </tr>
 </table>

 </div>

<div align="center" style="font-size: x-small; color: #C0C0C0">
Ramazan AKTOLU
</div>
</center>
<div id="megamenu1" class="megamenu">

<div class="column">
 <h3>Okulumuz</h3>
 <ul>
 <li><%: Html.ActionLink("Okulumuz", "Anasayfa", "Okulumuz") %></li>
    <li><%: Html.ActionLink("Tarihçe", "Tarihce", "Okulumuz") %></li>
    <li><%: Html.ActionLink("Vizyon & Misyon", "Vizyon", "Okulumuz") %></li>

 </ul>
</div>


</div>
<div id="Ataturk1" class="megamenu">
<div class="column">
 <h3>Atatürk Köşesi</h3>
 <ul>
 <li><%: Html.ActionLink("Atatürk Köşesi", "Anasayfa", "Ataturk") %></li>
 </ul>
</div>
</div>
    </form>

</body>
</html>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM