html helper don't get values back from controller after ajax.beginform

107 Views Asked by At

I have a ajax.beginform that I have to upload a file and then in the view I have hidden for the path of the file that have been saved in the server.

The problem is that the value of the path doesn't return to the view after the the post call.

I am returning new partial view with the errors and the value don't coming

please help me

post method from controller that return partial view

[HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult SaveSocioDetails(SpSocio socio) // ajax for 1 step in socio
    {
        bool sociook = false;
        socio.StudentId = sStudentId; // bind student id to socio model
        socio = SocioDetValid(ref sociook,socio);
        // add validation
        if (ModelState.IsValid && sociook)
        {
            socio = SaveSocioModel(socio);
            Response.StatusCode = 200;
        }
        else
           Response.StatusCode = 300; // return error to client the model is not valid
        return PartialView("~/Views/Student/Socio/SocioDetails.cshtml", socio); // return the partial view of the forn with validation messages
    }

Sociodetvalid function that saves the file and add the path to path field:

            // bank account validation and save
        if (socio.FileBankAccount == null) // if there is no file
        {
            if (socio.PathBankAccount == null) // check if he upload file already - if not add error message
            {
                ModelState.AddModelError("FileBankAccount", "חובה לצרף קובץ"); 
                ok = false;
            }
        }
        else // upload new the file
            socio.PathBankAccount = Files.SaveFileInServer(socio.FileBankAccount, "BankAccount", sStudentId, socio.PathBankAccount);

the section in view for upload and the hidden for the path string:

<div class="row">
<div class="col-xl-3 col-lg-3 col-md-4 col-12 ">
    @Html.LabelFor(model => model.BankStatus, htmlAttributes: new { @class = "control-label col-12" })
    @Html.EditorFor(model => model.BankStatus, new { htmlAttributes = new { @class = "form-control must m-1 mt-0" } })
    @Html.ValidationMessageFor(model => model.BankStatus, "", new { @class = "text-danger" })
    @Html.HiddenFor(model => model.PathBankAccount)
</div>
<div class="col-xl-3 col-lg-3 col-md-4 col-12">
    @Html.LabelFor(model => model.FileBankAccount, htmlAttributes: new { @class = "control-label col-12 must-sign", @for = "" })
    <div class="chose-file m-1 mt-0">
        @Html.TextBoxFor(model => model.FileBankAccount, new { @class = "form-control must", @type = "file", @accept = "image/jpeg,image/jpg,image/png,application/pdf", @style = "display:none;" })
        <label for="FileBankAccount">
            <i class="ml-1 material-icons">add_photo_alternate</i>
            בחר קובץ
        </label>
    </div>
    @Html.ValidationMessageFor(model => model.FileBankAccount, "", new { @class = "text-danger" })
</div>
@*
<div class="col-xl-3 col-lg-3 col-md-4 col-12" style="display:@(Model.PathBankAccount != null ? "" : "none")">
    <label class="control-label col-12" for="">קובץ שמור</label>
    <a name="@Model.PathBankAccount" class="btn btn-light btn-file m-1 mt-0">צפייה בקובץ שמור</a>
</div>*@

js that dont have the value

Thanks for help

Update:

Ajax form code : this is the part of the ajax that in a big view

    <fieldset>
    @using (Ajax.BeginForm("SaveSocioDetails", "Student", new AjaxOptions { HttpMethod = "POST", OnSuccess = "firstsuccess",OnFailure = "sociodetailsfail", UpdateTargetId="partialsocio" ,LoadingElementId = "div_loading" }, new { @enctype = "multipart/form-data" }))
    {
        @Html.AntiForgeryToken()
    <div id="partialsocio">
        @Html.Action("PartialSocioDetails", "Student", new { SpId = ViewBag.SpId })
    </div>
            <div id="div_loading" style="display:none;">
            <img src="@Url.Content("~/Content/Pic/Spinner.gif")" alt="" />
        </div>
        <button class="btn btn-primary" type="submit">המשך</button>
    }
    <input type="button" name="next" class="next action-button bg-primary" hidden value="Next" id="sociodetnext" />
</fieldset>

this is the function of fail and success ajax:

    <script>
   $(document).ready(function ()
    {
    });

    function firstsuccess() {
        console.log('this is ajaxSuccess');
        $("#sociodetnext").click();
    }

    function sociodetailsfail(bdata) {
        console.log('this is ajaxfail');
        console.log(bdata.responseText);
        $('#partialsocio').html(bdata.responseText);
    }
</script>

In the script that Have returned to the client the value of the string doesn't appear..

Thanks for help

0

There are 0 best solutions below