Asp.net mvc 不方便将文件上载到服务器并使用TempData
我正在尝试使用Uploadify将文件上载到服务器,但没有使用TempData在控制器之间传递变量,并且没有发现错误 我正在尝试将变量fileName和file以及控制器“GetFile”的TempData传递给控制器“ModelCreate” 控制器“GetFile”工作得很好,但是当我检查控制器“ModelCreate”中的“date1”和“date2”的值时,它是空的 我只想将文件保存在控制器“ModelCreate”中 为什么“date1”和“date2”为空Asp.net mvc 不方便将文件上载到服务器并使用TempData,asp.net-mvc,asp.net-mvc-3,tempdata,Asp.net Mvc,Asp.net Mvc 3,Tempdata,我正在尝试使用Uploadify将文件上载到服务器,但没有使用TempData在控制器之间传递变量,并且没有发现错误 我正在尝试将变量fileName和file以及控制器“GetFile”的TempData传递给控制器“ModelCreate” 控制器“GetFile”工作得很好,但是当我检查控制器“ModelCreate”中的“date1”和“date2”的值时,它是空的 我只想将文件保存在控制器“ModelCreate”中 为什么“date1”和“date2”为空 祝福没有足够的信息来回答这
祝福没有足够的信息来回答这个问题。根据评论部分的要求,我将提供一个完整的示例,演示一个表单,允许用户填写两个输入字段并上传一个文件 一如既往,我们从定义视图模型开始,该模型将反映我们希望在视图上显示的信息:
public class MyViewModel
{
[Required]
public string TextField { get; set; }
[DataType(DataType.MultilineText)]
public string TextAreaField { get; set; }
public bool CheckBoxField { get; set; }
[Required]
public HttpPostedFileBase FileField { get; set; }
}
然后我们可以有一个具有2个操作的控制器:一个简单显示表单的GET操作和一个提交表单时处理表单信息的POST操作:
public class HomeController : Controller
{
public ActionResult Index()
{
var model = new MyViewModel();
return View(model);
}
[HttpPost]
public ActionResult Index(MyViewModel model)
{
if (!ModelState.IsValid)
{
// there were validation errors => redisplay the view
return View(model);
}
// at this stage the model is valid => we could do some processing
// first let's save the file
var appData = Server.MapPath("~/app_data");
var file = Path.Combine(appData, Path.GetFileName(model.FileField.FileName));
model.FileField.SaveAs(file);
// then we could process the other properties
// ...
return Content("Thanks for submitting the data");
}
}
最后是视图模型顶部的强类型视图:
@model MyViewModel
@Html.ValidationSummary(false)
@using (Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div>
@Html.EditorFor(x => x.TextField)
@Html.ValidationMessageFor(x => x.TextField)
</div>
<div>
@Html.EditorFor(x => x.TextAreaField)
@Html.ValidationMessageFor(x => x.TextAreaField)
</div>
<div>
@Html.CheckBoxFor(x => x.CheckBoxField)
@Html.ValidationMessageFor(x => x.CheckBoxField)
</div>
<div>
@Html.LabelFor(x => x.FileField)
@Html.TextBoxFor(x => x.FileField, new { type = "file" })
</div>
<button type="submit">OK</button>
}
@model MyViewModel
@Html.ValidationSummary(false)
@使用(Html.BeginForm(null,null,FormMethod.Post,new{enctype=“multipart/formdata”}))
{
@EditorFor(x=>x.TextField)
@Html.ValidationMessageFor(x=>x.TextField)
@EditorFor(x=>x.TextAreaField)
@Html.ValidationMessageFor(x=>x.TextAreaField)
@Html.CheckBoxFor(x=>x.CheckBoxField)
@Html.ValidationMessageFor(x=>x.CheckBoxField)
@LabelFor(x=>x.FileField)
@Html.TextBoxFor(x=>x.FileField,新的{type=“file”})
好啊
}
您在问ModelCreate的输出有什么问题,但没有显示返回值@tzerb I更新了这个问题:上传最初调用哪个控制器操作?如何从第一个操作传递到ModelCreate操作?你在重定向吗?您显示的GetFile
方法是什么?谁在调用此方法?@Darin Dimitrov最初通过Uploadify调用“GetFile”,使用此控制器没有问题,我对TempData有问题:(但是GetFile
看起来不像控制器操作。控制器操作必须返回ActionResults。GetFile
只返回一个字符串。另外,与ModelCreate
操作有什么关系?如何调用此操作?
@model MyViewModel
@Html.ValidationSummary(false)
@using (Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div>
@Html.EditorFor(x => x.TextField)
@Html.ValidationMessageFor(x => x.TextField)
</div>
<div>
@Html.EditorFor(x => x.TextAreaField)
@Html.ValidationMessageFor(x => x.TextAreaField)
</div>
<div>
@Html.CheckBoxFor(x => x.CheckBoxField)
@Html.ValidationMessageFor(x => x.CheckBoxField)
</div>
<div>
@Html.LabelFor(x => x.FileField)
@Html.TextBoxFor(x => x.FileField, new { type = "file" })
</div>
<button type="submit">OK</button>
}