• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
    • Questions
    • Teachers
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

234
Views
Return PartialView ("vista", modelo) con Ajax está actualizando las etiquetas pero no los cuadros de texto, incluso para la misma propiedad

Estoy trabajando con MVC 5, VB.NET, jQuery.

En una de mis páginas, estoy llamando a una acción usando una llamada ajax e intentando volver a cargar el html en función del resultado.

Estoy modificando dos propiedades:

  1. Mensaje
  2. identificador

El mensaje se reemplaza con el resultado deseado, sin embargo, el Identificador no.

Aquí está el código:

Vista:

 @model CapitalLending.LoanScoreModel <div class="container"> <form id="scoring-form"> <label class="text-danger">@Html.DisplayFor(model => model.ErrorMessage)</label> <label class="text-success">@Html.DisplayFor(model => model.SuccessMessage)</label> @Html.HiddenFor(model=>model.LoanId) <div class="row"> <div class="col-lg-6 form-group"> <div class="row col-lg-12"> @Html.LabelFor(model => model.Loan.ClientId, new {@class = "col-lg-6 col-md-6 col-sm-6"}) @Html.TextBoxFor(model => model.Loan.ClientId, new {@class = "form-control col-lg-6 col-md-6 col-sm-6"}) </div> <div class="row col-lg-12"> @Html.LabelFor(model => model.ScoreIdentifier, new {@class = "col-lg-6 col-md-6 col-sm-6"}) @Html.TextBoxFor(model => model.ScoreIdentifier, new {@class = "form-control col-lg-6 col-md-6 col-sm-6"}) </div> <div class="row col-lg-12"> @Html.LabelFor(model => model.Score, new {@class = "col-lg-6 col-md-6 col-sm-6"}) @Html.TextBoxFor(model => model.Score, new {@class = "form-control col-lg-6 col-md-6 col-sm-6"}) </div> </div> <div class="col-lg-6"> <div class="row col-lg-12"> @Html.LabelFor(model => model.OperatorScore, new {@class = "col-lg-6 col-md-6 col-sm-6"}) @Html.TextBoxFor(model => model.OperatorScore, new {@class = "form-control col-lg-6 col-md-6 col-sm-6"}) </div> <div class="row col-lg-12"> @Html.LabelFor(model => model.OperatorComment, new {@class = "col-lg-6 col-md-6 col-sm-6"}) @Html.TextAreaFor(model => model.OperatorComment, new {@class = "form-control col-lg-6 col-md-6 col-sm-6"}) </div> </div> </div> <div class="row"> <div class="col-lg-3"> <button name="get-identifier" value="get-identifier" class="ui btn btn-primary col-lg-6 col-md-6 col-sm-6" onclick="GetIdentifier()">Get Identifier</button> </div> <div class="col-lg-3"> <button name="get-score" value="get-score" class="ui btn btn-primary col-lg-6 col-md-6 col-sm-6" onclick="GetScore()">Get Score</button> </div> <div class="col-lg-6 pull-right"> <button name="submit-score" value="submit-score" class="ui btn btn-primary col-lg-3 col-md-3 col-sm-3 pull-right" onclick="SubmitScore()">Submit Score</button> </div> </div> </form> </div> <script type="text/javascript"> $('form#scoring-form').submit(function(e) { e.preventDefault(); return; }); function GetIdentifier() { $.ajax({ type: "GET", url: '/Scoring/create-scoring', cache: false, data: $('#scoring-form').serialize(), // dataType: 'text/json', success: function (result) { // console.log(result); $('#scoring').html(result); } }); } </script>

Tenga en cuenta que el ID de #scoring es el div principal dentro de la vista principal. Esta es solo una vista parcial.

Controlador:

 <ActionName("create-scoring")> Public Function CreateScoringFileForClient(oModel As LoanScoreModel) As ActionResult Dim oResult As ScoringResultModel = ScoringStrategy.CreateScoringFile(oModel) If oResult.IsSuccess Then If oResult.ResultFound Then oModel.ScoreIdentifier = oResult.ScoringModel.Identifier.ToString oModel.SuccessMessage = "Identifier Received" ScoringManager.SetLoanScoreIdentifier(oModel.LoanId, oModel.ScoreIdentifier) Return PartialView("_Scoring", oModel) Else Dim sErrorMessage = "No Reply From Scoring API" oModel.ErrorMessage = sErrorMessage Return PartialView("_Scoring", oModel) End If Else Dim sErrorMessage = "Couldn't call API" oModel.ErrorMessage = sErrorMessage Return PartialView("_Scoring", oModel) End If End Function

Me aseguré de que con los puntos de interrupción el identificador no esté vacío y que se devuelva con Return PartialView("_Scoring", oModel) .

Cuando finaliza la llamada y se devuelve el resultado, el único cambio que veo es el mensaje que se muestra, pero el cuadro de texto no se modifica:

Resultado después de la llamada Ajax

He identificado el problema después de llamar a console.log(result) dentro de la función Success Ajax, y descubrí que el mensaje se está agregando, pero el identificador no, y no puedo encontrar la solución hasta ahora.

Qué podría estar causando este problema ? Y como arreglarlo ?

Actualizar:

He intentado agregar esto a mi vista:

 <label class="text-danger">@Html.DisplayFor(model => model.ScoreIdentifier)</label>

debajo de las otras dos etiquetas.

Cuando obtengo el resultado en ajax, la etiqueta se muestra con el valor correcto, pero el cuadro de texto no se actualiza.

EDITAR:

Siguiendo el comentario de Swati, intenté agregar @value a atributos html como este:

 @Html.TextBoxFor(model => model.ScoreIdentifier, new { @class = "form-control col-lg-6 col-md-6 col-sm-6", @id = "identifier", @readonly = "readonly", @value = Model.ScoreIdentifier })

Esto tampoco actualizó el valor en la respuesta de ajax... sin embargo, si uso Model.ScoringIdentifier en otro lugar de la vista, mostrará el valor real... Tengo la sensación de que tiene algo que ver con @Html.TextBoxFor. ..

Para responder a la solicitud de Chandan, aquí están los modelos que estoy usando:

 Public Class LoanScoreModel Public property Id As Integer Public property LoanId As Integer Public property ScoreIdentifier As String Public property Score As Double Public property IdentifierDateAcquired As DateTime Public property ScoreDateAcquired As DateTime Public property OperatorScore As Double Public property OperatorScoreDateAcquired As DateTime Public property OperatorComment As String Public property OperatorUserId As Guid Public Property Loan As Loan Public Property ErrorMessage As String = "" Public Property SuccessMessage As String = "" End Class Public Class ScoringResultModel Public Property IsSuccess As Boolean Public Property ResultFound As Boolean Public Property ErrorMessage As String Public Property ScoringModel As ScoringModel End Class Public Class ScoringModel Public Property Identifier As Guid Public Property Score As Double End Class
about 3 years ago · Santiago Trujillo
1 answers
Answer question

0

Mientras editaba la pregunta la última vez y decía que I have a feeling it has something to do with @Html.TextBoxFor... , seguí haciendo algunas búsquedas más sobre cómo asegurarme de que el cuadro de texto se actualice después de un Ajax llamada.

Llegué a estas dos preguntas en SO:

TextBoxFor no se actualiza después de la devolución de datos
Cómo actualizar el valor del cuadro de texto @Html.TextBoxFor(m => m.MvcGridModel.Rows[j].Id)

Citando de la segunda pregunta:

Esto se debe a que los asistentes de HTML como TextBoxFor primero miran ModelState cuando vinculan sus valores y solo después de eso en el modelo. Entonces, si en su acción POST intenta modificar algún valor que fue parte de la solicitud POST inicial, también tendrá que eliminarlo del ModelState si desea que esos cambios surtan efecto en la vista.

Al final, dado que estoy usando un asistente HTML, tuve que borrar el estado de mi modelo antes de devolverlo, por lo que mi controlador se cambió a esto:

 <ActionName("create-scoring")> Public Function CreateScoringFileForClient(oModel As LoanScoreModel) As ActionResult Dim oResult As ScoringResultModel = ScoringStrategy.CreateScoringFile(oModel) ModelState.Clear() 'https://stackoverflow.com/questions/11341545/how-to-update-the-textbox-value-html-textboxform-m-mvcgridmodel-rowsj-id oModel.ErrorMessage = "" oModel.SuccessMessage = "" If oResult.IsSuccess Then If oResult.ResultFound Then oModel.ScoreIdentifier = oResult.ScoringModel.Identifier.ToString oModel.SuccessMessage = Resources.Resources.IdentifierReceived ScoringManager.SetLoanScoreIdentifier(oModel.Loan.ID, oModel.ScoreIdentifier) Return PartialView("_Scoring", oModel) Else Dim sErrorMessage = Resources.Resources.ProblemAPINoResult oModel.ErrorMessage = sErrorMessage Return PartialView("_Scoring", oModel) End If Else Dim sErrorMessage = Resources.Resources.ProblemAPINoSuccess oModel.ErrorMessage = sErrorMessage Return PartialView("_Scoring", oModel) End If End Function

Lo que solucionó el problema y ahora mi cuadro de texto se actualiza con nuevos datos después de la llamada.

about 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error