ASP.net MVC文件上传到Amazon S3并取得进展

时间:2011-04-13 13:46:42

标签: c# asp.net-mvc html-helper flajaxian

美好的一天,

我有一个ASP.net MVC应用程序需要上传文件到Amazon S3。我找到了一个叫做Flajaxian的简洁控件,可以很好地完成工作。问题是,现在我想将一行数据插入到跟踪上传的数据库中。如果查看下面的代码,控件会有一个FileUploader1_ConfirmUpload事件,该事件在上载完成后触发。 Url.Action(“上传”,“TracksController”)不能达到我想要的效果,这会触发TrackController控制器中的上传操作。这是我第一次使用MVC,所以我希望有一个简单的解决方案。

我最初有一个提交按钮,可以像<div class="submitBtnDiv"><input type="submit" value="Submit" class="submitBtn" id="trackAdd" /></div>这样的代码执行上传。但现在上传是异步的,所以我想做同样的回发

感谢所有花时间阅读本文的人,以及那些试图解决此问题的人。

 <div class="contentsAcc"><form id="form2" runat="server" style="width:400px">
                <script runat="server">
                    private void FileUploader1_FileNameDetermining(object sender, FileNameDeterminingEventArgs e)
                    {
                        e.FileName = SessionWrapper.PersonId.ToString() + "_" + e.FileName;
                    }
                </script>
                <script runat="server">
                    private void FileUploader1_ConfirmUpload(object sender, ConfirmUploadEventArgs e)
                    {
                        Url.Action("Upload", "TracksController");                            
                    }
                </script>
                    <fjx:FileUploader ID="FileUploader1" runat="server">
                        <Adapters>
                            <fjx:DirectAmazonUploader   OnFileNameDetermining="FileUploader1_FileNameDetermining" OnConfirmUpload="FileUploader1_ConfirmUpload"
                                AccessKey="WebConfig:AmazonAccessKey" 
                                SecretKey="WebConfig:AmazonSecretKey"
                                BucketName="tracksupload" />
                        </Adapters>
                    </fjx:FileUploader>

        </form></div>

好的,所以我昨天试图改变我的方法。我没有尝试触发TracksController的Action,而是想将Action代码移动到Confirm_Upload事件中。但现在我仍然需要获取文本框的值。因为MVC不记得状态,所以证明是困难的。这是textBoxes。它们与上面的代码在同一页面上。

 <label for="BandName">Artist</label> 
       <%=Html.TextBox("Artists") %><%:Html.ValidationMessage("Artist","*")%>
        <div class="clearfix">
        </div>
        <label for="SongName">Song Title
        </label>
          <%=Html.TextBox("SongName") %><%:Html.ValidationMessage("SongName","*")%>
        <div class="clearfix">
        </div>

是否可以提取文本框的值并将其发送到服务器端发生的Confirm_Upload事件?如果没有服务器代码那么可能是JavaScript客户端?

我正在使用的上传控件是唯一一个我想要的东西,但它是Web表单,网站是MVC。所以我在mvc页面上有一个web表单控件。我想使用MVC文本框值并将其传递给Web窗体控件进行处理。

1 个答案:

答案 0 :(得分:1)

Url.Action只返回一个URI。你想重定向吗?

有时WebForms事件在MVC中工作,所以我看到它是否像您需要重定向一样简单。


您的主要问题是您正试图在看起来像MVC页面的地方使用WebForms代码。这通常是不兼容的,您需要自己连接javascript或直接在视图中使用其他许多javascript文件上传控件。

我不能推荐任何东西,因为我不熟悉S3上传。也许其他SO用户可以更好地回答。