コード例 #1
0
    public static MaterialFile ReadMaterialFile(string path)
    {
        MaterialFile mtl = new MaterialFile();

        string[] lines = File.ReadAllLines(path);

        mtl.newmtl = new List <string> ();
        mtl.mapKd  = new List <string> ();

        char[] charsToTrim = { ' ', '\t' };

        foreach (string line in lines)
        {
            string str = line.Trim(charsToTrim);
            if (str == "" || str.StartsWith("#"))
            {
                continue;
            }

            string[] token = str.Split(' ');
            switch (token [0])
            {
            case ("newmtl"):
                mtl.newmtl.Add(token [1]);
                break;

            case ("map_Kd"):
                mtl.mapKd.Add(token [1]);
                break;
            }
        }

        return(mtl);
    }
コード例 #2
0
    public static MaterialFile ReadMaterialFile(string path)
    {
        MaterialFile mtl = new MaterialFile();

        string[] lines = File.ReadAllLines(path);

        mtl.newmtl = new List <string> ();
        mtl.mapKd  = new List <string> ();

        foreach (string line in lines)
        {
            if (line == "" || line.StartsWith("#"))
            {
                continue;
            }

            string[] token = line.Split(' ');
            switch (token [0])
            {
            case ("newmtl"):
                mtl.newmtl.Add(token [1]);
                break;

            case ("map_Kd"):
                mtl.mapKd.Add(token [1]);
                break;
            }
        }

        return(mtl);
    }
コード例 #3
0
        public ActionResult DownloadMaterialFile(int fileId)
        {
            MaterialFile indirilecekFile = db.MaterialFiles.Find(fileId);

            byte[] fileBytes = (byte[])indirilecekFile.MaterialFileContents;
            return(File(fileBytes, indirilecekFile.MaterialFileContentType, indirilecekFile.MaterialFileName));
        }
コード例 #4
0
        public ActionResult DeleteMaterialFileFromIndex(int fileId, int materailCategoryId)
        {
            MaterialFile secilenFile = db.MaterialFiles.FirstOrDefault(s => s.MaterialFileID == fileId);

            db.MaterialFiles.Remove(secilenFile);
            db.SaveChanges();
            return(RedirectToAction("Index", new { ID = materailCategoryId }));
        }
コード例 #5
0
        public ActionResult DeleteMaterialFile(int fileId, int materailId)
        {
            MaterialFile secilenFile = db.MaterialFiles.FirstOrDefault(s => s.MaterialFileID == fileId);

            db.MaterialFiles.Remove(secilenFile);
            db.SaveChanges();
            return(RedirectToAction("Edit", new { id = materailId }));
        }
コード例 #6
0
        public async Task <ActionResult <MaterialFile> > Create([FromQuery] CreateRequest request, [FromForm] IFormFile file)
        {
            if (!await _authManager.HasSitePermissionsAsync(request.SiteId,
                                                            MenuUtils.SitePermissions.MaterialFile))
            {
                return(Unauthorized());
            }

            var site = await _siteRepository.GetAsync(request.SiteId);

            if (file == null)
            {
                return(this.Error(Constants.ErrorUpload));
            }

            var fileName = Path.GetFileName(file.FileName);

            var fileType = PathUtils.GetExtension(fileName);

            if (!_pathManager.IsFileExtensionAllowed(site, fileType))
            {
                return(this.Error(Constants.ErrorFileExtensionAllowed));
            }
            if (!_pathManager.IsFileSizeAllowed(site, file.Length))
            {
                return(this.Error(Constants.ErrorFileSizeAllowed));
            }

            var materialFileName     = PathUtils.GetMaterialFileName(fileName);
            var virtualDirectoryPath = PathUtils.GetMaterialVirtualDirectoryPath(UploadType.File);

            var directoryPath = PathUtils.Combine(_settingsManager.WebRootPath, virtualDirectoryPath);
            var filePath      = PathUtils.Combine(directoryPath, materialFileName);

            await _pathManager.UploadAsync(file, filePath);

            var material = new MaterialFile
            {
                GroupId  = request.GroupId,
                Title    = PathUtils.RemoveExtension(fileName),
                FileType = fileType.ToUpper().Replace(".", string.Empty),
                Url      = PageUtils.Combine(virtualDirectoryPath, materialFileName)
            };

            await _materialFileRepository.InsertAsync(material);

            return(material);
        }
コード例 #7
0
        public JsonResult UpdateFile(MaterialFile obj, IFormFile fileUpload)
        {
            var msg = new JMessage()
            {
                Error = false, Title = ""
            };

            try
            {
                if (fileUpload != null)
                {
                    var upload = _upload.UploadFile(fileUpload, Path.Combine(_hostingEnvironment.WebRootPath, "uploads\\files"));
                    if (upload.Error)
                    {
                        msg.Error = true;
                        msg.Title = String.Format(CommonUtil.ResourceValue("MLP_MSG_FILE"), CommonUtil.ResourceValue("MLP_MSG_FILE_SERVER_FAIL"));
                    }
                    else
                    {
                        var getItem = _context.MaterialFiles.FirstOrDefault(x => x.Id == obj.Id);
                        getItem.Name  = obj.Name;
                        getItem.Soure = "/uploads/files/" + upload.Object.ToString();
                        _context.MaterialFiles.Update(getItem);
                        _context.SaveChanges();
                        msg.Title = String.Format(CommonUtil.ResourceValue("MLP_MSG_FILE_UPDATE"), CommonUtil.ResourceValue("MLP_MSG_FILE_SUCCESS"));
                    }
                }
                else
                {
                    var getItem = _context.MaterialFiles.FirstOrDefault(x => x.Id == obj.Id);
                    getItem.Name = obj.Name;
                    _context.MaterialFiles.Update(getItem);
                    _context.SaveChanges();
                    msg.Title = String.Format(CommonUtil.ResourceValue("MLP_MSG_FILE_UPDATE"), CommonUtil.ResourceValue("MLP_MSG_FILE_SUCCESS"));
                }
            }
            catch (Exception ex)
            {
                msg.Title = String.Format(CommonUtil.ResourceValue("MLP_MSG_FILE_UPDATE"), CommonUtil.ResourceValue("MLP_MSG_FILE_FAIL"));
                msg.Error = true;
            }
            return(Json(msg));
        }
コード例 #8
0
        public JsonResult InsertFile(MaterialFile obj, IFormFile fileUpload)
        {
            var msg = new JMessage()
            {
                Error = false, Title = ""
            };

            try
            {
                var upload = _upload.UploadFile(fileUpload, Path.Combine(_hostingEnvironment.WebRootPath, "uploads\\files"));
                if (upload.Error)
                {
                    msg.Error = true;
                    msg.Title = String.Format(CommonUtil.ResourceValue("MLP_MSG_FILE"), CommonUtil.ResourceValue("MLP_MSG_FILE_SERVER_FAIL"));
                }
                else
                {
                    var file = new MaterialFile
                    {
                        Name        = obj.Name,
                        Fomart      = Path.GetExtension(fileUpload.FileName),
                        CreatedBy   = ESEIM.AppContext.UserName,
                        CreatedTime = DateTime.Now,
                        ProductCode = obj.ProductCode,
                        Soure       = "/uploads/files/" + upload.Object.ToString(),
                    };
                    _context.MaterialFiles.Add(file);
                    _context.SaveChanges();
                    msg.Title = String.Format(CommonUtil.ResourceValue("MLP_MSG_FILE"), CommonUtil.ResourceValue("MLP_MSG_FILE_SUCCESS"));
                }
            }
            catch (Exception ex)
            {
                msg.Title = String.Format(CommonUtil.ResourceValue("MLP_MSG_FILE"), CommonUtil.ResourceValue("MLP_MSG_FILE_FAIL"));
                msg.Error = true;
            }
            return(Json(msg));
        }
コード例 #9
0
        public void Load(System.IO.Stream stream)
        {
            CanSave = false;

            using (var reader = new FileReader(stream))
            {
                while (!reader.EndOfStream)
                {
                    ChunkHeader chunk = new ChunkHeader();
                    chunk.Position   = reader.Position;
                    chunk.Identifier = reader.ReadUInt32();
                    uint unk = reader.ReadUInt32();
                    chunk.ChunkSize   = reader.ReadUInt32();
                    chunk.ChunkId     = reader.ReadUInt32();
                    chunk.NextFilePtr = reader.ReadUInt32();
                    chunk.FileSize    = reader.ReadUInt32();
                    uint unk2 = reader.ReadUInt32();
                    uint unk3 = reader.ReadUInt32();
                    Chunks.Add(chunk);

                    var Identifer = chunk.Identifier.Reverse();

                    switch (Identifer)
                    {
                    case ChunkTextureFile:
                        if (chunk.ChunkSize > 0x88)
                        {
                            reader.Seek(chunk.Position + 0x88, System.IO.SeekOrigin.Begin);
                            chunk.FileName = reader.ReadString(Syroot.BinaryData.BinaryStringFormat.ZeroTerminated);
                        }
                        break;

                    case ChunkMetaInfo:
                        break;

                    case ChunkAnimInfo:
                        if (chunk.ChunkSize > 0xB0)
                        {
                            //  reader.Seek(chunk.Position + 0xB0, System.IO.SeekOrigin.Begin);
                            // chunk.FileName = reader.ReadString(Syroot.BinaryData.BinaryStringFormat.ZeroTerminated);
                        }
                        break;

                    case ChunkAnimData:
                        AnimationFile animFile = new AnimationFile();
                        animFile.Read(reader);
                        chunk.ChunkData = animFile;
                        break;

                    case ChunkSkeletonData:
                        SkeletonFile skelFile = new SkeletonFile();
                        skelFile.Read(reader);
                        chunk.ChunkData = skelFile;
                        break;

                    case ChunkModelData:
                        ModelFile modelFile = new ModelFile();
                        modelFile.Read(reader);
                        chunk.ChunkData = modelFile;
                        break;

                    case ChunkMaterialData:
                        MaterialFile matFile = new MaterialFile();
                        matFile.Read(reader);
                        chunk.ChunkData = matFile;
                        break;
                    }

                    reader.Seek(chunk.Position + chunk.ChunkSize, System.IO.SeekOrigin.Begin);
                }

                ReadGPUFile(FilePath);
            }
        }
コード例 #10
0
        private void ReadGPUFile(string FileName)
        {
            string path = FileName.Replace("cpu", "gpu");

            if (!System.IO.File.Exists(path))
            {
                return;
            }

            int offset = 0;

            //Read the data based on CPU chunk info
            using (var reader = new FileReader(path))
            {
                for (int i = 0; i < Chunks.Count; i++)
                {
                    if (Chunks[i].FileSize != 0 || Chunks[i].FileName != string.Empty || Chunks[i].ChunkData != null)
                    {
                        long pos = reader.Position;

                        var identifer = Chunks[i].Identifier.Reverse();

                        var fileInfo = new FileInfo();

                        //Get CPU chunk data
                        if (Chunks[i].ChunkData != null)
                        {
                            if (Chunks[i].ChunkData is AnimationFile)
                            {
                                AnimationFile animFile = (AnimationFile)Chunks[i].ChunkData;
                                fileInfo.FileName = animFile.FileName;
                                fileInfo.FileData = animFile.Data;
                            }
                            if (Chunks[i].ChunkData is SkeletonFile)
                            {
                                SkeletonFile animFile = (SkeletonFile)Chunks[i].ChunkData;
                                fileInfo.FileName = animFile.FileName;
                                fileInfo.FileData = animFile.Data;
                            }
                            if (Chunks[i].ChunkData is MaterialFile)
                            {
                                MaterialFile animFile = (MaterialFile)Chunks[i].ChunkData;
                                fileInfo.FileName = animFile.FileName;
                                fileInfo.FileData = animFile.Data;
                            }
                            if (Chunks[i].ChunkData is MaterialFile)
                            {
                                MaterialFile animFile = (MaterialFile)Chunks[i].ChunkData;
                                fileInfo.FileName = animFile.FileName;
                                fileInfo.FileData = animFile.Data;
                            }
                            if (Chunks[i].ChunkData is ModelFile)
                            {
                                ModelFile modelFile = (ModelFile)Chunks[i].ChunkData;
                                fileInfo.FileName = modelFile.FileName;

                                byte[] BufferData = new byte[0];
                                if (Chunks[i].FileSize != 0)
                                {
                                    BufferData = reader.ReadBytes((int)Chunks[i].FileSize);
                                }

                                fileInfo.FileData = Utils.CombineByteArray(modelFile.Data, modelFile.Data2, BufferData);


                                //Don't advance the stream unless the chunk has a pointer
                                if (Chunks[i].NextFilePtr != 0)
                                {
                                    reader.Seek(pos + Chunks[i].NextFilePtr, System.IO.SeekOrigin.Begin);
                                }
                            }
                        }
                        else //Else get the data from GPU
                        {
                            if (Chunks[i].FileName != string.Empty)
                            {
                                fileInfo.FileName = $"{Chunks[i].FileName}";
                            }
                            else
                            {
                                fileInfo.FileName = $"{i} {Chunks[i].ChunkId} {identifer.ToString("X")}";
                            }

                            if (Chunks[i].FileSize != 0)
                            {
                                fileInfo.FileData = reader.ReadBytes((int)Chunks[i].FileSize);
                            }
                            else
                            {
                                fileInfo.FileData = new byte[0];
                            }
                        }
                        files.Add(fileInfo);

                        //Don't advance the stream unless the chunk has a pointer
                        if (Chunks[i].NextFilePtr != 0)
                        {
                            reader.Seek(pos + Chunks[i].NextFilePtr, System.IO.SeekOrigin.Begin);
                        }
                    }
                }
            }
        }
コード例 #11
0
        public static void Main(string[] args)
        {
            bool includeDefaultValues = false;
            bool showHelp             = false;

            var options = new OptionSet()
            {
                { "d|defaults", "include default values when exporting", v => includeDefaultValues = v != null },
                { "h|help", "show this message and exit", v => showHelp = v != null },
            };

            List <string> extras;

            try
            {
                extras = options.Parse(args);
            }
            catch (OptionException e)
            {
                Console.Write("{0}: ", GetExecutableName());
                Console.WriteLine(e.Message);
                Console.WriteLine("Try `{0} --help' for more information.", GetExecutableName());
                return;
            }

            if (extras.Count < 1 || extras.Count > 2 || showHelp == true)
            {
                Console.WriteLine("Usage: {0} [OPTIONS]+ input_bgsm [output_json]", GetExecutableName());
                Console.WriteLine("       {0} [OPTIONS]+ input_json [output_bgsm]", GetExecutableName());
                Console.WriteLine();
                Console.WriteLine("Options:");
                options.WriteOptionDescriptions(Console.Out);
                return;
            }

            string inputPath = Path.GetFullPath(extras[0]);

            using (var input = File.OpenRead(inputPath))
            {
                var b = input.ReadValueU8();

                if (b != '{')
                {
                    input.Position = 0;

                    var material = new MaterialFile();
                    material.Deserialize(input);

                    if (input.Position != input.Length)
                    {
                        throw new FormatException();
                    }

                    var outputPath = extras.Count > 1
                                         ? Path.GetFullPath(extras[1])
                                         : Path.ChangeExtension(inputPath, ".json");
                    using (var output = File.Create(outputPath))
                        using (var writer = new StreamWriter(output))
                            using (var jsonWriter = new JsonTextWriter(writer))
                            {
                                jsonWriter.Indentation = 2;
                                jsonWriter.IndentChar  = ' ';
                                jsonWriter.Formatting  = Formatting.Indented;

                                var settings = new JsonSerializerSettings();
                                settings.DefaultValueHandling = includeDefaultValues == false
                                                            ? DefaultValueHandling.Ignore
                                                            : DefaultValueHandling.Include;
                                var serializer = JsonSerializer.Create(settings);
                                // TODO(rick): make it output base, then descendant (instead of descendant, then base)
                                serializer.Serialize(jsonWriter, material);
                            }
                }
                else
                {
                    var outputPath = extras.Count > 1
                                         ? Path.GetFullPath(extras[1])
                                         : Path.ChangeExtension(inputPath, ".bgsm");
                    throw new NotImplementedException();
                }
            }
        }
コード例 #12
0
        public async Task <ActionResult <List <SubmitResult> > > Submit([FromBody] SubmitRequest request)
        {
            var site = await _siteRepository.GetAsync(request.SiteId);

            if (site == null)
            {
                return(this.Error("无法确定内容对应的站点"));
            }

            var result = new List <SubmitResult>();

            foreach (var filePath in request.FilePaths)
            {
                if (string.IsNullOrEmpty(filePath))
                {
                    continue;
                }

                var fileName = PathUtils.GetFileName(filePath);

                var virtualUrl = await _pathManager.GetVirtualUrlByPhysicalPathAsync(site, filePath);

                var fileUrl = await _pathManager.ParseSiteUrlAsync(site, virtualUrl, true);

                if (request.IsLibrary)
                {
                    var materialFileName     = PathUtils.GetMaterialFileName(fileName);
                    var virtualDirectoryPath = PathUtils.GetMaterialVirtualDirectoryPath(UploadType.Image);

                    var directoryPath    = _pathManager.ParsePath(virtualDirectoryPath);
                    var materialFilePath = PathUtils.Combine(directoryPath, materialFileName);
                    DirectoryUtils.CreateDirectoryIfNotExists(materialFilePath);

                    FileUtils.CopyFile(filePath, materialFilePath, true);

                    var file = new MaterialFile
                    {
                        Title = fileName,
                        Url   = PageUtils.Combine(virtualDirectoryPath, materialFileName)
                    };

                    await _materialFileRepository.InsertAsync(file);
                }


                result.Add(new SubmitResult
                {
                    FileUrl        = fileUrl,
                    FileVirtualUrl = virtualUrl
                });
            }

            var options = TranslateUtils.JsonDeserialize(site.Get <string>(nameof(LayerFileUploadController)), new Options
            {
                IsChangeFileName = true,
                IsLibrary        = true
            });

            options.IsChangeFileName = request.IsChangeFileName;
            options.IsLibrary        = request.IsLibrary;
            site.Set(nameof(LayerFileUploadController), TranslateUtils.JsonSerialize(options));

            await _siteRepository.UpdateAsync(site);

            return(result);
        }
コード例 #13
0
        public void Load(System.IO.Stream stream)
        {
            CanSave = false;

            using (var reader = new FileReader(stream))
            {
                reader.SetByteOrder(true);

                Text = FileName;
                while (!reader.EndOfStream)
                {
                    ChunkHeader chunk = new ChunkHeader();
                    chunk.Position   = reader.Position;
                    chunk.Identifier = reader.ReadUInt32();
                    uint unk = reader.ReadUInt32();
                    chunk.ChunkSize   = reader.ReadUInt32();
                    chunk.ChunkId     = reader.ReadUInt32();
                    chunk.NextFilePtr = reader.ReadUInt32();
                    chunk.FileSize    = reader.ReadUInt32();
                    uint unk2 = reader.ReadUInt32();
                    uint unk3 = reader.ReadUInt32();
                    Chunks.Add(chunk);

                    var Identifer = chunk.Identifier.Reverse();
                    switch (Identifer)
                    {
                    case ChunkTextureFile:
                        SWUTexture texture = new SWUTexture();
                        reader.SeekBegin(chunk.Position + 72);
                        texture.ImageKey         = "texture";
                        texture.SelectedImageKey = "texture";
                        texture.ReadChunk(reader);
                        chunk.ChunkData = texture;
                        if (chunk.ChunkSize > 244)
                        {
                            reader.Seek(chunk.Position + 244, System.IO.SeekOrigin.Begin);
                            chunk.FileName = reader.ReadString(Syroot.BinaryData.BinaryStringFormat.ZeroTerminated);
                            texture.Text   = chunk.FileName;
                        }
                        Nodes.Add(texture);
                        break;

                    case ChunkMetaInfo:
                        break;

                    case ChunkAnimInfo:
                        if (chunk.ChunkSize > 0xB0)
                        {
                            reader.Seek(chunk.Position + 0xB0, System.IO.SeekOrigin.Begin);
                            chunk.FileName = reader.ReadString(Syroot.BinaryData.BinaryStringFormat.ZeroTerminated);
                        }
                        break;

                    case ChunkAnimData:
                        AnimationFile animFile = new AnimationFile();
                        animFile.Read(reader);
                        chunk.ChunkData = animFile;
                        break;

                    case ChunkSkeletonData:
                        SkeletonFile skelFile = new SkeletonFile();
                        skelFile.Read(reader);
                        chunk.ChunkData = skelFile;
                        break;

                    case ChunkModelData:
                        ModelFile modelFile = new ModelFile();
                        modelFile.Read(reader);
                        chunk.ChunkData = modelFile;
                        break;

                    case ChunkMaterialData:
                        MaterialFile matFile = new MaterialFile();
                        matFile.Read(reader);
                        chunk.ChunkData = matFile;
                        break;
                    }

                    reader.Seek(chunk.Position + chunk.ChunkSize, System.IO.SeekOrigin.Begin);
                }

                ReadGPUFile(FilePath);
            }

            TreeHelper.CreateFileDirectory(this);
        }
コード例 #14
0
 public async Task <bool> UpdateAsync(MaterialFile file)
 {
     return(await _repository.UpdateAsync(file, Q
                                          .CachingRemove(CacheKey)
                                          ));
 }
コード例 #15
0
 public async Task <int> InsertAsync(MaterialFile file)
 {
     return(await _repository.InsertAsync(file, Q
                                          .CachingRemove(CacheKey)
                                          ));
 }
コード例 #16
0
        public ActionResult Edit(Material material, IEnumerable <HttpPostedFileBase> files, FormCollection formcollection)
        {
            if (ModelState.IsValid)
            {
                Material secilenMaterial = db.Materials.SingleOrDefault(s => s.MaterialID == material.MaterialID);
                secilenMaterial.Description        = material.Description;
                secilenMaterial.ComponentModel     = material.ComponentModel;
                secilenMaterial.CorporateAccount   = material.CorporateAccount;
                secilenMaterial.CorporateAccountID = material.CorporateAccountID;
                secilenMaterial.Location           = secilenMaterial.Location;
                secilenMaterial.LocationID         = material.LocationID;
                secilenMaterial.MaterialCategory   = material.MaterialCategory;
                secilenMaterial.MaterialCategoryID = secilenMaterial.MaterialCategoryID;
                secilenMaterial.MaterialCodeNum    = material.MaterialCodeNum;
                secilenMaterial.MaterialFiles      = material.MaterialFiles;
                secilenMaterial.MaterialGroup      = material.MaterialGroup;
                secilenMaterial.MaterialGroupID    = material.MaterialGroupID;
                secilenMaterial.MaterialType       = material.MaterialType;
                secilenMaterial.MaterialTypeID     = material.MaterialTypeID;
                secilenMaterial.Note              = material.Note;
                secilenMaterial.ParentMaterial    = material.ParentMaterial;
                secilenMaterial.ParentMaterialID  = material.ParentMaterialID;
                secilenMaterial.RackLocation      = material.RackLocation;
                secilenMaterial.ValidationState   = material.ValidationState;
                secilenMaterial.ValidationStateID = material.ValidationStateID;

                //db.SaveChanges();

                #region MaterialKlasorleriniKaydet

                if (files != null)
                {
                    foreach (var file in files)
                    {
                        if (file != null)
                        {
                            string filename     = null;
                            string fileType     = null;
                            byte[] fileContents = null;

                            fileContents = new byte[file.ContentLength];
                            file.InputStream.Read(fileContents, 0, file.ContentLength);
                            fileType = file.ContentType;
                            filename = file.FileName;

                            MaterialFile materialFile = new MaterialFile();
                            materialFile.MaterialFileName        = filename;
                            materialFile.MaterialFileContentType = fileType;
                            materialFile.MaterialFileSize        = fileContents != null ? fileContents.Length : 0;
                            materialFile.MaterialFileContents    = fileContents;
                            materialFile.MaterialID = material.MaterialID;
                            materialFile.MaterialFileDescription = formcollection["EklenenDosyaAciklama"].ToString();

                            db.MaterialFiles.Add(materialFile);

                            //MaterialFile materialFile = new MaterialFile();
                            //materialFile.MaterialFileName = file.FileName;
                            //materialFile.MaterialFileContentType = file.ContentType;
                            //materialFile.MaterialFileSize = file.ContentLength;
                            //materialFile.MaterialFileContents = new byte[file.ContentLength];
                            //file.InputStream.Read(materialFile.MaterialFileContents, 0, materialFile.MaterialFileSize);
                            //materialFile.MaterialID = material.MaterialID;
                            //db.MaterialFiles.Add(materialFile);
                            //db.SaveChanges();
                        }
                    }
                }

                #endregion

                //db.Entry(material).State = EntityState.Modified;
                db.SaveChanges();
                string materialCategoryID = material.MaterialCategoryID.ToString();
                return(RedirectToAction("Index", new { ID = materialCategoryID }));
            }


            ViewBag.LocationID         = new SelectList(db.Locations, "LocationID", "Description", material.LocationID);
            ViewBag.CorporateAccountID = new SelectList(db.CorporateAccounts, "CorporateAccountID", "Title", material.CorporateAccountID);
            ViewBag.ParentMaterialID   = new SelectList(db.Materials, "MaterialID", "Description", material.ParentMaterialID);
            ViewBag.MaterialCategoryID = new SelectList(db.MaterialCategories, "MaterialCategoryID", "Description", material.MaterialCategoryID);
            ViewBag.MaterialGroupID    = new SelectList(db.MaterialGroups, "MaterialGroupID", "Description", material.MaterialGroupID);
            ViewBag.MaterialTypeID     = new SelectList(db.MaterialTypes, "MaterialTypeID", "Description", material.MaterialTypeID);
            ViewBag.ValidationStateID  = new SelectList(db.ValidationStates, "ValidationStateID", "Description", material.ValidationStateID);
            return(View(material));
        }