首页 > 解决方案 > 模型未填充

问题描述

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 && 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";
}

当我填写表格并按“发布新闻”时,它到达了控制器中的发布功能,但传递了一个空模型(所有字段均为空)。我尝试更改字段、ID、名称等,但无法解决。还浏览了互联网,即使发现人们遇到此问题的案例,所提供的解决方案都没有为我工作。对不起新手问题,因为我对 ASP 世界很陌生。

更新:

解决了这个问题。问题是我id = "edit"在我的表格中使用了。我不知道它是如何以及为什么它不起作用。

标签: c#asp.net-mvc-5.net-framework-version

解决方案


推荐阅读