Question

@Html.DisplayFor() value not change after send data. I read a article about this issue and say it like this; only send data what such as EditorFor, TextBoxFor, TextAreaFor and change state. Is it true? How can I change this value after the postback?

View

@model HRProj.Model.Person

@using(Html.BeginForm("Skills", "Home", FormMethod.Post, new { enctype = "multipart/form-data" })){
    @Html.HiddenFor(m => m.SkillDoc.Filename)
    <span class="file-upload">
        <span>Choose a file</span>
        <input type="file" name="file" />
    </span>
    File name : @Html.DisplayFor(m => m.SkillDoc.Filename)
     <button>Upload</button>

}

Controller

public ActionResult Skills(int? id)
{
    Others oparations...
    var model = new Person { SkillDoc = db.GetSkillDoc().FirstOrDefault(m => m.PersonId == id) };
    return View(model);
}

[HttpPost]
public ActionResult Skills(Person model, HttpPostedFileBase file)
{
    Others oparations...

    if (ModelState.IsValid)
    {
        SkillDoc doc = new SkillDoc();
        doc.Id = model.SkillDoc.Id;
        doc.PersonId = model.SkillDoc.PersonId;
        doc.CvDoc = (file != null) ? file.FileName : model.SkillDoc.CvDoc;
        db.SkillDocCRUD(doc, "I");

        TempData["eState"] = "The record adding successfully";

        if (file != null)
        {
            file.SaveAs(Server.MapPath("~/Files/" + file.FileName));
        }
    }
    return View(model);
}
Was it helpful?

Solution

Please add the following line inside the if block:

model.SkillDoc=doc;

Or rather redirect to Skills action:

return RedirectToAction("Skills", new{id= model.PersonId});
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top