如何解决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 举报,一经查实,本站将立刻删除。