微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ASP NET是否有另一种方法可以在不使用RedirectToAction的情况下将值从控制器中的当前功能复制到另一个控制器?

如何解决ASP NET是否有另一种方法可以在不使用RedirectToAction的情况下将值从控制器中的当前功能复制到另一个控制器?

很抱歉,如果我没有正确写出我的问题,但是我将尝试更详细地描述我的情况。 我正在开发用于存储文本文件的应用程序。这个程序的想法是:用户创建帐户(注册视图),登录登录视图),然后该用户可以查看我的本地数据库(在sql server中管理)在WebGrid视图中拥有的所有文本文件。 问题是将UserID值从登录视图传输到WorkSpaceController中的UploadFile函数。我使用了“ public ActionResult Login(UserDataClass log)”中的RedirectToAction来在FileManager函数显示WebGridView)中传输记录的用户电子邮件函数获取此useremail值,并使用它通过sqlConnection获取UserID,以通过完成查询“从UserData内部联接FileData中选择”来最终获取用户拥有的所有文件。 FileData的外键是“ UserID”,因此我将其用于将文件上传到当前登录用户到我的数据库。 最后,问题是将“ useremail”值从“ Login func”或“ FileManager”转移到UploadFile再次获取ID,并有机会将当前用户文件上传到dbo.FileData。

希望您能帮助我解决此问题?由于情况的缘故,我不使用实体框架进行这种操作。

如果我不正确地描述细节,则在需要时写出更多细节。

UserDataController

public class UserDataController : Controller
{
    string constr = ConfigurationManager.ConnectionStrings["sqlServer"].ConnectionString;
    // GET: UserData
    [HttpGet]
    public ActionResult Login()
    {
        return View();
    }
    public ActionResult Registration()
    {
        return View();
    }
    [HttpPost]
    public ActionResult Registration(UserDataClass reg) //Создание аккаунта
    {
        string connection = "Data Source=DESKTOP-LRLFA5K\\sqlEXPRESS;Initial Catalog=FileCloud;Integrated Security=True";
        using (sqlConnection sqlcon = new sqlConnection(connection))
        {
            string sqlquery = "insert into UserData(UserName,UserEmail,UserPassword) values('" + reg.UserName + "','" + reg.UserEmail + "','" + reg.UserPassword + "')";
            using (sqlCommand sqlcom = new sqlCommand(sqlquery,sqlcon))
            {
                sqlcon.open();
                sqlcom.ExecuteNonQuery();
                sqlcon.Close();
            }
        }
        return View(reg);
    }
    [HttpPost]
    public ActionResult Login(UserDataClass log) //Авторизация
    {
        sqlConnection con = new sqlConnection();
        con.ConnectionString = "Data Source=DESKTOP-LRLFA5K\\sqlEXPRESS;Initial Catalog=FileCloud;Integrated Security=True;MultipleActiveResultSets=True";
        sqlDataReader dr;
        con.open();
        sqlCommand com = new sqlCommand("select * from UserData where UserEmail ='" + log.UserEmail + "' and UserPassword ='" + log.UserPassword + "'",con);
        dr = com.ExecuteReader();
        if (dr.Read())
        {
            Session["useremail"] = log.UserEmail.ToString();
            return RedirectToAction("FileManager","WorkSpace",new { useremail = log.UserEmail.ToString()});
        }
        else
        {
            ViewData["Message"] = "Неправильное имя пользователя или пароль";
        }
        con.Close();
        return View();
    }

WorkSpaceController

public class WorkSpaceController : Controller
{
    string constr = ConfigurationManager.ConnectionStrings["sqlServer"].ConnectionString;
    WorkSpaceClass ws = new WorkSpaceClass();
    List<WorkSpaceClass> _ws = new List<WorkSpaceClass>();
    // GET: WorkSpace
    public ActionResult Add()
    {
        return View();
    }
    public ActionResult UploadFile(string useremail)
    {
        UserDataClass info = new UserDataClass();
        info.UserEmail = Session["username"].ToString();
        sqlConnection sqlcon = new sqlConnection(constr);
        string comman = "select UserID from UserData where UserEmail = '" + info.UserEmail + "'"; //??? Вероятно,Email пуст...
        using (sqlCommand sqlcom = new sqlCommand(comman,sqlcon))
        {
            sqlcon.open();
            TempData["UserID"] = sqlcom.ExecuteScalar();
        }
        //ws.UserID = id; //UserID не читается
        sqlcon.Close();
        return View();
    }
    [HttpPost]
    public ActionResult UploadFile(HttpPostedFileBase doc,string useremail) //Загружаем текстовый файл в БД
    {
        ViewBag.UserEmail = useremail;
        if (doc != null)
        {
            ws.FileName = Path.GetFileName(doc.FileName);
            ws.FileData = new byte[doc.ContentLength];
            doc.InputStream.Read(ws.FileData,doc.ContentLength);
            ws.FileExtension = Path.GetExtension(ws.FileName);
            DateTime FileDate = DateTime.Now;

            sqlConnection sqlcon = new sqlConnection(constr);

            ws.FileDate = FileDate.ToString("dd/MM/yyyy");
            if (ws.FileExtension == ".doc" || ws.FileExtension == ".docx" || ws.FileExtension == ".txt" || ws.FileExtension == ".pdf")
            {
                string FilePath = Path.Combine(Server.MapPath("~/FileData"),ws.FileName); //Указываем дирректорию хранения файла
                doc.SaveAs(FilePath); 
                string command = "insert into FileData(FileName,FileData,FileExtension,FileDate,UserID) values(@FileName,@FileData,@FileExtension,@FileDate,@UserID)";
                sqlcon.open();
                sqlCommand sqlcom = new sqlCommand(command,sqlcon);
                sqlcom.Parameters.Add("@FileName",sqlDbType.VarChar).Value = ws.FileName;
                sqlcom.Parameters.Add("@FileData",sqlDbType.VarBinary).Value = ws.FileData;
                sqlcom.Parameters.Add("@FileExtension",sqlDbType.VarChar).Value = ws.FileExtension;
                sqlcom.Parameters.Add("@FileDate",sqlDbType.VarChar).Value = ws.FileDate;
                sqlcom.Parameters.Add("@UserID",sqlDbType.Int).Value = (int)TempData["UserID"];
                sqlcom.ExecuteNonQuery();
                sqlcon.Close();
            }
        }
        return View(ws);
    }

    public ActionResult FileManager(WorkSpaceClass wsc,string useremail)
    {
        UserDataClass info = new UserDataClass();
        info.UserEmail = useremail;
        sqlConnection sqlcon = new sqlConnection(constr);
        string comman = "select UserID from UserData where UserEmail = '" + info.UserEmail + "'"; //??? Вероятно,sqlcon))
        {
            sqlcon.open();
            TempData["UserID"] = sqlcom.ExecuteScalar();
        }
        sqlcon.Close();
        List<WorkSpaceClass> list = new List<WorkSpaceClass>();
        DataTable dtFiles = GetFileDetails();
        foreach (DaTarow dr in dtFiles.Rows)
        {
            list.Add(new WorkSpaceClass
            {
                FileName = @dr["filename"].ToString(),FileExtension = @dr["fileextension"].ToString(),FileDate = @dr["filedate"].ToString(),FileURL = dr["fileurl"].ToString()
            }); ;
        }
        wsc.FileList = list;
        return View(wsc);
    }

    private DataTable GetFileDetails()
    {
        DataTable dtData = new DataTable();
        sqlConnection con = new sqlConnection(constr);
        con.open();
        sqlCommand command = new sqlCommand("select FileData.FileName,FileDate from UserData inner join FileData on FileData.UserID = UserData.UserID where UserData.UserID = '" + (int)TempData["UserID"] + "'",con);
        sqlDataAdapter da = new sqlDataAdapter(command);
        da.Fill(dtData);
        con.Close();
        return dtData;
    }

    public ActionResult DownloadFile(string FilePath)
    {
        string FileName = Server.MapPath("~" + FilePath);
        byte[] FileData = GetFile(FileName);
        return File(FileData,System.Net.Mime.MediaTypeNames.Application.Octet,FilePath);
    }

    byte[] GetFile(string s)
    {
        System.IO.FileStream fs = System.IO.File.OpenRead(s);
        byte[] data = new byte[fs.Length];
        int br = fs.Read(data,data.Length);
        if (br != fs.Length)
        {
            throw new System.IO.IOException(s);
        }
        return data;
    }

UserDataClass模型

public class UserDataClass
{
    public int UserID { get; set; }
    [display(Name = "Имя")]
    [required(ErrorMessage = "Введите имя пользователя")]
    public string UserName { get; set; }
    [display(Name = "Email")]
    [required(ErrorMessage = "Введите Email")]
    public string UserEmail { get; set; }
    [display(Name = "Пароль")]
    [required(ErrorMessage = "Введите пароль")]
    public string UserPassword { get; set; }
    [display(Name = "Подтверждение пароля")]
    [required(ErrorMessage = "Подтвердите пароль")]
    public string ConfirmPassword { get; set; }
    [display(Name = "Выберите изображение")]
    public byte[] AvatarData { get; set; }
    public HttpPostedFileBase ImageFile { get; set; } //??? Может это лишнее
}

WorkSpaceClass模型

public class WorkSpaceClass
{
    public string FileName { get; set; }
    public byte[] FileData { get; set; }
    public string FileExtension { get; set; }
    public string FileDate { get; set; }
    public int UserID { get; set; }
    
    public string FileURL { get; set; }
    public IEnumerable<WorkSpaceClass> FileList { get; set; }
}

解决方法

根据我的理解,您的FileManager操作采取的操作多于one argument,并且您仅通过one argument操作方法传递了login。您的操作方法是

public ActionResult FileManager(WorkSpaceClass wsc,string useremail)

您仅通过useremail而不通过WorkSpaceClass

return RedirectToAction("FileManager","WorkSpace",new { useremail = log.UserEmail.ToString()});

分辨率 因此,尝试将WorkSpaceClass对象也从FileManager动作方法传递给Login动作方法。

return RedirectToAction("FileManager",new { wsc=new WorkSpaceClass(),useremail = log.UserEmail.ToString()});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。