Я разрабатываю веб-приложение, используя Angular JS и ASP.NET MVC. Но у меня проблема с привязкой модели сложного типа. Я загружаю список файлов, в основном список строк. В базе данных они (список строк и список файлов) являются одними и теми же столбцами и таблицами, потому что я сохраняю путь после загрузки файла. Для строки я сохраняю тот же столбец с путем к файлу. Например, таблица базы данных имеет столбцы Id(int) и Data(string).
Затем я сохраняю строковые данные, опубликованные AngularJS, в столбце данных для пути к файлу, а также в столбце данных. Но дело в том, что мне нужно помнить порядок. Например, пользователь добавляет текстовое поле, а затем вводит значение, затем динамически добавляет поле файла, затем выбирает файл, затем добавляет текстовое поле и снова вводит значение. Таким образом, порядок должен быть ["значение текста 1", "Файл", "значение текста 2"]. Но проблема в том, что мы не можем связать список данных, смешанный как с HttpPostedFileBase для файла, так и со строкой для текстового значения. Итак, что я сделал, так это создал модели просмотра, как показано ниже.
public class CreateBlogVM
{
[Required]
[MaxLength(250)]
public string Title { get; set; }
[Required]
public ContentModel[] TextContents { get; set; }
[Required]
public ContentFileModel[] Files { get; set; }
}
public class ContentModel
{
public int OrderNo { get; set; }
public string Content { get; set; }
}
public class ContentFileModel
{
public int OrderNo { get; set; }
public HttpPostedFileBase File { get; set; }
}
Как вы можете видеть выше, CreateBlogVM будет ViewModel, которую я сейчас привязываю. Этот класс будет иметь два свойства сложного типа — TextContents и Files, которые я объяснил выше, что я делал. Итак, чтобы запомнить порядок, я создал сложный тип с полем OrderNo (Клиент будет передавать это значение), как вы можете видеть выше, поскольку мы не можем связать список данных примерно так.
[HttpPostedFileBase, String, String, HttpPostedFileBase]
Но проблема в том, что когда я публикую данные из Angular js, все значения равны нулю и не привязывают данные. Обязательным является только значение «Заголовок».
var textContents = new Array();
var photoContents = new Array();
for(var i=0; i<$scope.rows.length; i++)
{
if($scope.rows[i].type=="text")
{
var value = $scope.rows[i].value;
if (value == "" || value == null) {
showAlert("Text field should not be empty", "danger");
return;
}
else {
var content = { OrderNo: i, Content: value }
textContents.push(content)
}
}
else if($scope.rows[i].type=="photo")
{
var file = $scope.rows[i].file;
if(file==null)
{
showAlert("Photo file is required", "danger");
return;
}
else {
var content = { OrderNo: i, File: file };
photoContents.push(file);
}
}
}
var fd = new FormData();
fd.append('Title', $scope.title);
fd.append("TextContents", textContents);
fd.append("Files", photoContents);
$http.post("/Admin/Blog/Create", fd, {
transformRequest: angular.identity,
headers: { 'Content-Type': undefined }
})
.success(function () {
})
.error(function () {
});
Вышеприведенный код - это то, как я отправляю данные на сервер. Когда я публикую данные, все значения равны нулю, а mvc не связывает данные. Но когда я привязываю значения без использования сложного типа, подобного этому
public JsonResult Create(HttpPostedFileBase files, String contents, String title)
Но если я привяжусь, как указано выше, я не смогу упорядочить файлы и содержимое строк. Так что не так с моим кодом? Как я могу связать сложные данные, которые имеют список свойств объекта сложного типа?
textContents
) кstring
. Но почему не просто модель сstring content
иHttpPostedFileBase
, а затем основная модель содержит коллекцию этой модели, чтобы контент и файл были связаны вместе? - person   schedule 12.11.2016name/value
для формирования данных, а не наборов объектов. - person   schedule 12.11.2016public JsonResult Create(CreateBlogVM model)
? - person Mahbubur Rahman   schedule 12.11.2016