Как обработать загрузку файла в ASP.NET с формой, которая НЕ имеет runat = "server"? - PullRequest
0 голосов
/ 29 апреля 2011

По причинам, не связанным с этим вопросом, у меня не может быть формы на этой странице с атрибутом runat="server".

Как мне получить доступ к загруженному файлу, загруженному с использованием обычного <input type="file"...?

Этот вопрос затрагивает проблему (используя <input type="file" вместо <asp:FileUpload), однако оба они все еще runat = server.

Типы вещей, которые я хотел быхотел бы иметь возможность получать (на стороне сервера после публикации формы), включая:

  • if (MyInput.HasFile) ...
  • var fileName = MyInput.FileName;
  • var fullPathAndFile = MyInput.PostedFile.FileName;
  • var mimeType = MyInput.PostedFile.ContentType;

Я уверен, что все это можно сделать, я просто привык. NET позаботиться обо всем этом для меня!

Обновление: после проницательных комментариев ниже я, кажется, что-то делаю странным образом ...

Я изначально искал что-то вроде:

HttpPostedFile file = Request.Files["myFile"];
//accessing the file without having the element itself being runat="server", e.g. manually through the Request.
//(I know this doesn't work without runat="server", just an example to clarify my question)

//if(MyFile.HasFile) ...
if (file != null && file.ContentLength) ...

//var fName = MyFile.FileName
var fName = Path.GetFileName(file.FileName);

Но, похоже, даже это требует runat="server"

Ответы [ 2 ]

2 голосов
/ 29 апреля 2011

Создайте пользовательскую HtmlForm и включите и выключите ее следующим образом:

Пользовательская HtmlForm:

using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;


namespace CustomForm
{
    public class GhostForm : System.Web.UI.HtmlControls.HtmlForm
    {
        protected bool _render;

        public bool RenderFormTag
        {
            get { return _render; }
            set { _render = value; }
        }

        public GhostForm()
        {
            //By default, show the form tag
            _render = true;
        }

        protected override void RenderBeginTag(HtmlTextWriter writer)
        {
            //Only render the tag when _render is set to true
            if (_render)
                base.RenderBeginTag(writer);
        }     

        protected override void RenderEndTag(HtmlTextWriter writer)
        {
            //Only render the tag when _render is set to true
            if (_render)
                base.RenderEndTag(writer);
        }
    }
}

Использование:

public partial class MyClass : System.Web.UI.Page
  {
      protected void Page_Load(object sender, EventArgs e)
      {
          GhostForm mainForm = new GhostForm();
          mainForm.RenderFormTag = false;
            .....    
      }
          // Upload your file, etc.
      .....
  }
1 голос
/ 29 апреля 2011

Этот вопрос кажется немного запутанным.

Прежде всего, что вы имеете в виду, имея на странице еще одну форму?Страницы ASP.NET должны иметь ровно одну форму (с или без runat="server").

Эта формулировка заставляет меня думать, что у вас есть еще одна проблема, которую необходимо решить в первую очередь.Чрезвычайно необычно иметь действительную причину для нескольких форм на странице ASP.NET.

Но если это то, что вам действительно нужно, удалите теги ASP.NET для своего вопроса и замените их HTML.так как это не имеет ничего общего с ASP.NET.

...