我有這樣一個模型,和一個有資料的資料庫表
。public class FileType
{
public int Id { get; set; }
public string FileTypeName { get; set; }
我有上傳表單和這個視圖模型用于上傳
public List<FileModel> Files { get; set; }
public string Name { get; set; }
public string Extension { get; set; }
public string Description { get; set; }
public string Author { get; set; }
public string Year { get; set; }
public string FilePath { get; set; }
public string PublishedOn { get; set; }
public int DownloadCounter { get; set; }
public Genres流派 { get; set; }
public int FileTypeId { get; set; }
public List<SelectListItem> FtypeList { get; set; }
publicFileType FileT { get; set; }
我用這段代碼生成下拉串列來挑選檔案型別 :
public IActionResult Index()
{
var vm = new FileUploadViewModel() 。
vm.FtypeList = context.FileTypes
.Select(a => new SelectListItem()
{
Value = a.Id.ToString(),
文本=a.FileTypeName
}).ToList()。
ViewBag.Message = TempData["Message"/span>]。
return View(vm);
}
而在視圖中我有這樣的內容
<div class="form-group row">
< label asp-for="FileT" class="col-sm-2 col-form-label" > </label>
<div class="col-sm-10"/span>>
< select asp-for="FileT"/span> class="custom-select mr-sm-2" asp-items="@Model. FtypeList"></select>。
</div>/span>
</div>/span>
在HttpPost動作中我這樣做
[]
public async Task<IActionResult> Index(List<IFormFile> files, string description,DateTime PublishedOn,string Author,string Name,FileType Ftype)
{
foreach (var file in files)
{
var basePath = Path.Combine(Directory.GetCurrentDirectory() "Files")。)
bool basePathExists = System.IO.Directory.Exists(basePath)。
if (!basePathExists) Directory.CreateDirectory(basePath)。
var fileName = Path.GetFileNameWithoutExtension(file.FileName)。
var filePath = Path.Combine(basePath, file.FileName);
var extension = Path.GetExtension(file.FileName);
DateTime dateTime = DateTime.UtcNow;
var createdOn = dateTime.ToShortDateString();
if (!System.IO.File.Exists(filePath))
{
using (var stream = new FileStream(filePath, FileMode.Create)
{
await file.CopyToAsync(stream)。
}
var fileModel = new FileModel
{
年份 =創建時間。
PublishedOn = PublishedOn.ToShortDateString(),
FileType = file.ContentType,
Extension = 擴展。
名稱 = 名稱。
描述 = 描述。
FilePath = filePath,
作者=Author。
Ftype=Ftype。
};
context.Files.Add(fileModel)。
context.SaveChanges();
}
}
TempData["Message"] = "檔案成功上傳至檔案系統。"。
return RedirectToAction("index","Home")。
}
但是當我上傳檔案時,它并沒有從下拉串列中獲得選擇的值,而是在選擇的串列中創建新的專案。例如,我在表中只有4個檔案型別,如果我選擇的專案值=3,當檔案被上傳到資料庫的表中,上傳的檔案Ftype=5,它在FileTypes表中創建新行,Id=5。
uj5u.com熱心網友回復:
修復你的視圖,你必須使用FileTypeId來選擇
。 < select asp-for="FileTypeId"/span> class="custom-select mr-sm-2" asp-items="@Model. FtypeList"></select。
......
而且由于你使用post,你的動作輸入引數應該與model相同
。 public async Task< IActionResult> Index(FileModel viewModel)
......。
uj5u.com熱心網友回復:
根據你的FileUploadViewModel視圖模型,我認為FileTypeId是用戶選擇的檔案型別id值,對嗎?
如果是這樣的話,我建議你可以將你的代碼修改如下:
<div class="form-group row"/span>>
< label asp-for="FileTypeId"/span> class="col-sm-2 col-form-label"/span>> </label>
<div class="col-sm-10"/span>>
< select asp-for="FileTypeId"/span> class="custom-select mr-sm-2" asp-items="@Model. FtypeList"></select>。
</div>/span>
</div>/span>
然后,在動作方法中添加FileTypeId引數,就像這樣:
[]
public async Task<IActionResult> CreateFile(List<IFormFile> files, string description, DateTime PublishedOn, string Author, string Name, FileType Ftype, int FileTypeId)
{
然后,當你創建FileModel時,你可以根據FileTypeId引數來檢查FileType是否存在。請看下面的代碼:
var fileModel = newFileModel
{
年份 =創建時間。
PublishedOn = PublishedOn.ToShortDateString(),
FileType = file.ContentType,
Extension = 擴展。
名稱 = 名稱。
描述 = 描述。
FilePath = filePath,
作者=作者。
};
//Check if the FileType exists or not, if exists, get the existing FileType and assign it to the new fileModel. If not exists, create a new FileType Model and assign it to the new fileModel.
var filetype = context.FileTypes.Where(c => c.Id == FileTypeId).FirstOrDefault()
if (filetype!= null)
{
fileModel.Ftype = filetype; //使用現有的檔案型別.。
}
else }
{
var newFileType = new FileType()。
fileModel.Ftype = newFileType ; //使用新的檔案型別.。
}
context.Files.Add(fileModel)。
context.SaveChanges()。
FileType = file.ContentType。
此外,似乎FileModel也包含了FileType,不知道這個問題是否與它有關,如果你使用Ftype屬性來設定檔案型別,也許就沒有必要設定FileType屬性了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/332804.html
標籤:
上一篇:來自資料框架的字典的字典
