ddgjgj Ответов: 1

Asp.net метод редактирования MVC не работает


Вот такой вид :

@model CMSFC.Models.ContentHtml

@{
    ViewBag.Title = "Edit";
}


<script src="~/Themes/ckeditor/ckeditor.js"></script> 
<h2>Edit</h2>


@using (Html.BeginForm("Edit", "ContentHtml", null, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>ContentHtml</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        @Html.HiddenFor(model => model.Id)

        <div class="form-group">
            @Html.LabelFor(model => model.Content, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Content, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Content, "", new { @class = "text-danger" })
            </div>
        </div>

     

        <div class="form-group">
            @Html.LabelFor(model => model.Ctl, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">

                <img src="@Model.Ctl" alt="Image" />

                <input type="file" name="file" value="Browse" />

            </div>
        </div>



        <div class="form-group">
            @Html.LabelFor(model => model.PublishDate, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.TextBoxFor(model => model.PublishDate, "{0:dd MMM yyyy}", new { @class = "form-control" })
                @Html.ValidationMessageFor(model => model.PublishDate, "", new { @class = "text-danger" })
            </div>
        </div>


        <div class="form-group">
            @Html.LabelFor(model => model.ExpiryDate, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.TextBoxFor(model => model.ExpiryDate, "{0:dd MMM yyyy}", new { @class = "form-control" })
                @Html.ValidationMessageFor(model => model.ExpiryDate, "", new { @class = "text-danger" })
            </div>
        </div>





        <div class="form-group">
            @Html.LabelFor(model => model.Exclude, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Exclude, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Exclude, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Title1, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Title1, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Title1, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Title2, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Title2, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Title2, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Title3, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Title3, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Title3, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Title4, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Title4, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Title4, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Title5, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Title5, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Title5, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.ShortDescription1, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.TextAreaFor(model => model.ShortDescription1, new { cols = 60, rows = 6, @class = "form-control" })
                <script type="text/javascript"> CKEDITOR.replace('ShortDescription1'); </script>
                @Html.ValidationMessageFor(model => model.ShortDescription1, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.ShortDescription2, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.TextAreaFor(model => model.ShortDescription2, new { cols = 60, rows = 6, @class = "form-control" })
                <script type="text/javascript"> CKEDITOR.replace('ShortDescription2'); </script>
                @Html.ValidationMessageFor(model => model.ShortDescription2, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.ShortDescription3, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.TextAreaFor(model => model.ShortDescription3, new { cols = 60, rows = 6, @class = "form-control" })
                <script type="text/javascript"> CKEDITOR.replace('ShortDescription3'); </script>
                @Html.ValidationMessageFor(model => model.ShortDescription3, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.ShortDescription4, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.TextAreaFor(model => model.ShortDescription4, new { cols = 60, rows = 6, @class = "form-control" })
                <script type="text/javascript"> CKEDITOR.replace('ShortDescription4'); </script>
                @Html.ValidationMessageFor(model => model.ShortDescription4, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.ShortDescription5, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.TextAreaFor(model => model.ShortDescription5, new { cols = 60, rows = 6, @class = "form-control" })
                <script type="text/javascript"> CKEDITOR.replace('ShortDescription5'); </script>
                @Html.ValidationMessageFor(model => model.ShortDescription5, "", new { @class = "text-danger" })
            </div>
        </div>

       



        <div class="form-group">
            @Html.LabelFor(model => model.LongDescription1, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.TextAreaFor(model => model.LongDescription1, new { cols = 60, rows = 6, @class = "form-control" })
                <script type="text/javascript"> CKEDITOR.replace('LongDescription1'); </script>

                @Html.ValidationMessageFor(model => model.LongDescription1, "", new { @class = "text-danger" })
            </div>
        </div>






        <div class="form-group">
            @Html.LabelFor(model => model.LongDescription2, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.TextAreaFor(model => model.LongDescription2, new { cols = 60, rows = 6, @class = "form-control" })
                <script type="text/javascript"> CKEDITOR.replace('LongDescription2'); </script>
                @Html.ValidationMessageFor(model => model.LongDescription2, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.LongDescription3, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.TextAreaFor(model => model.LongDescription3, new { cols = 60, rows = 6, @class = "form-control" })
                <script type="text/javascript"> CKEDITOR.replace('LongDescription3'); </script>
                @Html.ValidationMessageFor(model => model.LongDescription3, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.LongDescription4, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.TextAreaFor(model => model.LongDescription4, new { cols = 60, rows = 6, @class = "form-control" })
                <script type="text/javascript"> CKEDITOR.replace('LongDescription4'); </script>
                @Html.ValidationMessageFor(model => model.LongDescription4, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.LongDescription5, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.TextAreaFor(model => model.LongDescription5, new { cols = 60, rows = 6, @class = "form-control" })
                <script type="text/javascript"> CKEDITOR.replace('LongDescription5'); </script>
                @Html.ValidationMessageFor(model => model.LongDescription5, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.InsertDate, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.InsertDate, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.InsertDate, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.InsertBy, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.InsertBy, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.InsertBy, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.OrderBy, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.OrderBy, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.OrderBy, "", new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Save" class="btn btn-default" />
            </div>
        </div>
    </div>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}



И это метод :

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "Id,Content,Ctl,PublishDate,ExpiryDate,Exclude,Title1,Title2,Title3,Title4,Title5,ShortDescription1,ShortDescription2,ShortDescription3,ShortDescription4,ShortDescription5,LongDescription1,LongDescription2,LongDescription3,LongDescription4,LongDescription5,InsertDate,InsertBy,OrderBy")] ContentHtml contentHtml, HttpPostedFileBase file)
{
    return CreateEdit(file, contentHtml, false);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "Id,Content,Ctl,PublishDate,ExpiryDate,Exclude,Title1,Title2,Title3,Title4,Title5,ShortDescription1,ShortDescription2,ShortDescription3,ShortDescription4,ShortDescription5,LongDescription1,LongDescription2,LongDescription3,LongDescription4,LongDescription5,InsertDate,InsertBy,OrderBy")] ContentHtml contentHtml, HttpPostedFileBase file)
{
    return CreateEdit(file, contentHtml, true);
}

private ActionResult CreateEdit(HttpPostedFileBase file, ContentHtml contentHtml, bool isCreate)
{
    if (ModelState.IsValid)
    {
        if (file != null)
        {
            file.SaveAs(HttpContext.Server.MapPath("/Content/Images/") + file.FileName);
            contentHtml.Ctl = ("/Content/Images/") + file.FileName;
        }

        if (isCreate)
        {


            db.ContentHtmls.Add(contentHtml);
            db.SaveChanges();

        }
        else
        {
            db.Entry(contentHtml).State = EntityState.Modified;
            db.SaveChanges();
        }
        return RedirectToAction("Index");
    }



    return View(contentHtml);
}




Когда я редактирую какую-либо запись , например поле TITLE1 , она обновляется , но изображение (поле Ctl)в ней удаляется . Я не знаю, почему это происходит здесь.У меня есть отладка кода, причем здесь
HttpPostedFileBase file
в методе редактирования файл имеет значение null.

Что я уже пробовал:

я просто объяснил проблему выше и свою попытку.

1 Ответов

Рейтинг:
9

Member 11025896

Привет,

Когда вы редактируете форму и не выбираете какой-либо файл, то

HttpPostedFileBase file
будет иметь значение null.вот почему колонки ЦТЛ будет банк.

В этом случае вы должны использовать
contentHtml.Ctl=contentHtml.Ctl


означает, что если пользователь не выбирает файл, то вы должны установить старое имя файла в столбце Ctl.

Надеюсь, это сработает..