输入标签返回NULL INT创建的ActionResult
问题描述:
的模式在实体这样我把HttpPostedFileBase名称为镜像文件我们虚拟的,因为我在实体即时得到实体使用映射输入标签返回NULL INT创建的ActionResult
public class Slider : IEntity
{
public virtual int Id { get; set; }
public virtual HttpPostedFileBase ImageFile { get; set; }
}
这里。镜像文件=空,因此下面的操作代码
[HttpPost]
public ActionResult AddOrEdit(Slider entity)
{
try
{
string fileName = Path.GetFileNameWithoutExtension(entity.ImageFile.FileName);
string extension = Path.GetExtension(entity.ImageFile.FileName);
fileName = fileName + DateTime.Now.ToString("yymmssfff") + extension;
entity.Image = fileName;
fileName = Path.Combine(Server.MapPath("~/Image/"), fileName);
entity.ImageFile.SaveAs(fileName);
if (ModelState.IsValid)
{
if (entity.Id == 0)
{
_sliderService.Insert(entity);
}
在我加入镜像文件名输入标签因此通常我不应该得到空的观点
?
请帮助
@model Slider
@{
Layout = null;
}
@using (Html.BeginForm("AddOrEdit", "Slider", FormMethod.Post, new { id =
"form", enctype = "multipart/form-data" , onsubmit = "return
SubmitForm(this)" }))
{
@Html.HiddenFor(m => m.Id)
<div class="form-group" style="height:270px;">
@Html.LabelFor(m => m.ImageFile, new { @class = "blue-text", @style =
"font-size:16px", @id = "" })
<input name="ImageFile" type="file" />
</div>
<div class="form-group">
<input type="submit" value="Submit" class="btn btn-primary" />
<input type="reset" value="Reset" class="btn" />
</div>
}
答
谢谢你们的帮助,我解决它通过消除 “的onsubmit =” 返回SubmitForm(本)“从Html.BeginForm标记,但在这种情况下,我没有得到验证消息或通知消息任何想法?
下面是的onsubmit
function SubmitForm(form) {
$.validator.unobtrusive.parse(form);
if ($(form).valid()) {
$.ajax({
type: "POST",
url: form.action,
data: $(form).serialize(),
success: function (data) {
if (data.success) {
Popup.dialog('close');
dataTable.ajax.reload();
$.notify(data.message, {
globalPosition: "top center",
className: "success"
})
} else {
Popup.dialog('close');
$.notify(data.message, {
globalPosition: "top center",
className: "error"
})
}
}
});
}
return false;
}
答
为了让你可以改变行动PARAMS像这样的文件:
[HttpPost]
public ActionResult AddOrEdit(HttpPostedFileBase ImageFile,Slider slider)
{
....
}
而且你需要改变你的实体像这样:
public class Slider : IEntity
{
public virtual int Id { get; set; }
public virtual string ImageUrl { get; set; }
}
那么行动里面,你可以这样做:
if (ImageFile!= null)
{
slider.ImgUrl = SaveImage(ImageFile);
db.Slider.Add(slider);
db.SaveChanges();
}
和SaveImage方法:
private string SaveImage(HttpPostedFileBase uploadFile)
{
if (uploadFile != null && uploadFile.ContentLength > 0)
{
string relativePath = "~/Image/" + Path.GetFileName(uploadFile.FileName);
string physicalPath = Server.MapPath(relativePath);
uploadFile.SaveAs(physicalPath);
return uploadFile.FileName;
}
return null;
}
代码我得到的帮助@Pankaj Makwana通过改变Jquery的几行代码来解决这个问题。您可以在下面的链接中找到解决方案。 https://*.com/questions/46400029/input-type-file-not-getting-serialized-in-jquery-ajax – Killua