我有两个可能相同的方法,像这样:重构方法,asp.net mvc4
[HttpGet]
public ActionResult CreateDirectory(string designId, CreateDirectoryModel model)
{
string customerSchema = SfsHelpers.StateHelper.GetSchema();
TemplateLibraryEntry entry = GetTemplateLibraryEntry(model.DesignId, customerSchema);
var path = Path.Combine(Server.MapPath("~/"), entry.FilePath);
model.DesignId = designId;
model.Directories = new List<string>();
model.Directories.Add("/");
model.Directories.AddRange(Directory.GetDirectories(path, "*", SearchOption.AllDirectories));
for (int i = 1; i < model.Directories.Count; i++) {
model.Directories[i] = model.Directories[i].Substring(path.Length).Replace('\\', '/');
}
model.Directories.Sort();
return View(model);
}
而且这种方法:
public void GetUploadFileFolders(UploadViewModel model, string designId)
{
string customerSchema = SfsHelpers.StateHelper.GetSchema();
TemplateLibraryEntry entry = GetTemplateLibraryEntry(designId, customerSchema);
var path = Path.Combine(Server.MapPath("~/"), entry.FilePath);
model.DesignId = designId;
model.Directories = new List<string>();
model.Directories.Add("/");
model.Directories.AddRange(Directory.GetDirectories(path, "*", SearchOption.AllDirectories));
for (int i = 1; i < model.Directories.Count; i++) {
model.Directories[i] = model.Directories[i].Substring(path.Length).Replace('\\', '/');
}
model.Directories.Sort();
}
但有可能这两种方法结合起来的一种方法?
但如何结合这两种方法?
谢谢
但如何改变这种:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult UploadFile(UploadViewModel uploadViewModel)
{
CreateDirectoryModel model = new CreateDirectoryModel();
try {
GetUploadFileFolders(model, uploadViewModel.DesignId);
//GetUploadFileFolders(uploadViewModel, uploadViewModel.DesignId);
string validationError = null;
bool fileUploaded = (uploadViewModel.UploadData != null) && (uploadViewModel.UploadData.ContentLength > 0) && !string.IsNullOrEmpty(uploadViewModel.UploadData.FileName);
if (ModelState.IsValid && fileUploaded) {
var extension = Path.GetExtension(uploadViewModel.UploadData.FileName).TrimStart('.');
if (!Seneca.SfsLib.FileSystemHelper.UploadOptInExtensions.Contains(extension)) {
ViewBag.Message = Resources.Entity.DesignTemplate.NotAllowedExtension;
return View(uploadViewModel);
}
var fileName = Path.GetFileName(uploadViewModel.UploadData.FileName);
TemplateLibraryEntry entry = GetTemplateLibraryEntry(uploadViewModel.DesignId, customerSchema);
string folder = uploadViewModel.Directories[uploadViewModel.SelectedFolderId];
var path = Path.Combine(Server.MapPath("~/"), entry.FilePath, folder.Replace('/', '\\').Trim('\\'), fileName);
if (!System.IO.File.Exists(path)) {
uploadViewModel.UploadData.SaveAs(path);
return RedirectToAction(uploadViewModel.DesignId, "DesignTemplate/File");
}
validationError = Resources.Entity.DesignTemplate.FileAlreadyExists;
}
if (!fileUploaded)
validationError = Resources.Entity.DesignTemplate.FileNotSelected;
GetUploadFileFolders(model, uploadViewModel.DesignId);
ViewBag.Message = validationError;
return View(uploadViewModel);
}
catch (Exception ex) {
Logger.Current.LogMessage(LogType.Warning, StateHelper.GetSchema(), LogCategory.Sfs, "Unable to upload file: {0}", ex.ToString());
AddDelayedNotification(Resources.Entity.DesignTemplate.FileCouldNotBeUploaded, Notification.NotificationType.Error);
}
return View(uploadViewModel);
}
函数是reusables ,您可以创建函数并从这两个操作中调用相同的操作。或者您可以从上面的操作中调用GetUploadFileFolders方法。 –
是的,有可能......你停在哪一步? –
取决于模型类是如何相互关联的。 – fero