#c# #asp.net-mvc-5 #.net-framework-version
Вопрос:
post.cshtml
@model NameSpace.Models.PostNewsModel
<style>
.col-centered {
float: none;
margin: 0 auto;
}
</style>
<br />
<br />
@using (Html.BeginForm(
"Post",
"Page",
new { ReturnUrl = ViewBag.ReturnUrl },
FormMethod.Post,
new
{
@class = "form-box",
role = "form",
id = "edit",
enctype = "multipart/form-data"
}))
{
<div style="color:red">
<span>
<p>@Html.ValidationMessageFor(model => model.PostTitle, "")</p>
<p>@Html.ValidationMessageFor(model => model.Content, "")</p>
<p>@Html.ValidationMessageFor(model => model.PostImage, "")</p>
<p>@ViewBag.Message</p>
</span>
</div>
<div class="col-sm-3 col-centered">
<label class="label" style="display: inline-block">Title</label>
<input required="" class="form-control mb-2" placeholder="Title of blog post" aria-describedby="desc_title" type="text" data-val="true" data-val-required="The Title field is required." id="PostTitle">
</div>
<br />
<div class="col-sm-3 col-centered">
<label class="label" style="display: inline-block">Image</label>
<input type="file" class="form-control mb-3" id="PostImage" class="form-control">
</div>
<br />
<div class="col-sm-3 col-centered">
<textarea id="Content" class="form-control mb-4" rows="20" aria-label="Content"></textarea>
</div>
<br />
<div class="col-sm-3 col-centered">
<input type="submit" value="Post News"/>
</div>
<br />
<br />
}
<script src="~/plugins/tinymce/tinymce.min.js"></script>
<script src="~/js/admin.js" async></script>
<link rel="stylesheet" href="~/css/admin.scss" />
Сообщение PageController.cs
[Route("post")]
[HttpPost]
public ActionResult post(PostNewsModel model, HttpPostedFileBase imageFile)
{
if (ModelState.IsValid)
{
if (imageFile != null amp;amp; imageFile.ContentLength > 0)
{
try
{
var rnd = "0123456789qwertyuiopasdfghjklzxcvbnm".Scramble().Substring(0, 10);
var random = Md5Hash.Hash(rnd);
string path = Path.Combine(Server.MapPath("~/img/News"), Path.GetFileName(random imageFile.FileName));
imageFile.SaveAs(path);
ViewBag.Message = "File uploaded successfully";
}
catch (Exception ex)
{
ViewBag.Message = "ERROR:" ex.Message.ToString();
}
}
else
{
ViewBag.Message = "You have not specified a file.";
}
if (PostNews(model, imageFile))
{
ViewBag.Message = "Successfully posted";
}
else
{
ViewBag.Message = "It's not valid for some reason.";
}
}
else
{
var errors = ModelState.Select(x => x.Value.Errors)
.Where(y => y.Count > 0)
.ToList();
foreach (var error in errors)
{
Console.WriteLine(error);
}
Console.WriteLine(model.PostTitle);
Console.WriteLine(model.Content);
Console.WriteLine(model.PostImage);
}
return View(model);
}
PostNewsModel.cs
public class PostNewsModel
{
public string PostTitle { get; set; }
public string Content { get; set; }
public string PostImage { get; set; }
public string PostDate { get; set; } = DateTime.Now.ToString();
public string PostViews { get; set; } = "1";
}
Когда я заполняю форму и нажимаю «Опубликовать новости», она переходит к функции публикации в контроллере, но передает пустую модель (все поля пусты). Я попытался изменить поля, идентификаторы, имена и все остальное, но не смог решить эту проблему. Также осмотрел Интернет и, хотя нашел случаи, когда у людей была эта проблема, ни одно из предлагаемых решений не сработало для меня. Извините за вопрос новичка, так как я довольно новичок в мире ASP.
Обновить:
Решил проблему. Проблема заключалась в том, что я использовал id = "edit"
в своей форме. Хотя я не знаю, как и почему это не сработало.
Комментарии:
1. пожалуйста, добавьте атрибут ‘name = «<имя столбца>», это будет работать.
2. @chandukomati привет, спасибо за ответ. Я пытался добавить имя раньше, но когда я добавляю имя, я получаю ошибку 500, и она не доходит до функции post в контроллере.
3. Не уверен, но похоже
PostImage
, что в модели должен быть типHttpPostedFileBase
, и никакой второй аргумент в методе контроллераpost
не требуется4. @Quercus привет, спасибо, что посмотрели на это. Это хорошая идея, изменил ее так, как ты предлагал.