MVC3, validación de formulario donde html se envía a través de una llamada ajax
Frecuentes
Visto 258 veces
0
tengo validación trabajando en el formulario que está en la página.
Tengo una acción que trae html a través de ajax, en este caso se elimina una vista parcial. En este formulario, mi validación no funciona.
HTML expulsado, también probé empujando el js con él y aún no tuve suerte:
<!-- form, AJAX and validation -->
<script type="text/javascript" src="/NetSite/Scripts/Tools/jqueryplugins/jquery.form.js"></script>
<script type="text/javascript" src="/NetSite/Scripts/jqueryMain/jquery.unobtrusive-ajax.min.js"></script>
<script type="text/javascript" src="/NetSite/Scripts/jqueryMain/jquery.validate.1.9.0/jquery.validate.min.js"></script>
<script type="text/javascript" src="/NetSite/Scripts/jqueryMain/jquery.validate.unobtrusive.min.js"></script>
<form action="/Transfer/ExtendExpirationDate" id="ExtendExpirationDateForm" method="post">
<input data-val="true" data-val-required="The XPhase field is required." id="Detail_XPhase" name="Detail.XPhase" type="hidden" value="870033f4-670e-4315-a23a-fc6ebb24cafe" />
<input data-val="true" data-val-number="The field Id must be a number." data-val-required="The Id field is required." id="Detail_Id" name="Detail.Id" type="hidden" value="100138062" />
<input data-val="true" data-val-number="The field Id must be a number." data-val-required="Response required!" id="DaysToExpire_Id" name="DaysToExpire.Id" type="hidden" value="100138062" />
<table class="siteTable">
<tbody>
<tr>
<th style="width: 40%;">Posted Date</th>
<td style="width: 60%;">08/27/2012</td>
</tr>
<tr>
<th>Expiration Date</th>
<td>09/03/2012</td>
</tr>
<tr>
<th>Current Days to Expiry</th>
<td>7</td>
</tr>
<tr>
<th>New Days to Expiry</th>
<td>
<input data-val="true" data-val-digits="The field should contain only digits" data-val-number="The field DaysToExpire must be a number." data-val-range="Value should be greater than 0" data-val-range-min="1" data-val-required="Response required!" id="DaysToExpire_DaysToExpire" maxlength="3" name="DaysToExpire.DaysToExpire" size="4" type="text" value="14" />
<span class="field-validation-valid" data-valmsg-for="DaysToExpire.DaysToExpire" data-valmsg-replace="true"></span>
</td>
</tr>
<tr>
<th class="empty"></th>
<td><button type="submit" title="Update" id="ExtendExpirationUpdateButton" class="gradientbutton gradientsmall gradientorange">Update</button></td>
</tr>
</tbody>
</table>
</form>
llamada de sugerencia de pista que trae el html:
<script type="text/javascript">
$('.ExtendExpirationDate').cluetip({
attribute: 'rel',
showTitle: true,
sticky: true,
closeText: JSGlobalVars.CloseImagePath,
ajaxCache: false,
arrows: true,
dropShadow: false,
activation: 'click', //click, hover
height: 'auto',
closePosition: 'title',
width: '400px'
});
</script>
Acción:
public ActionResult ExtendExpirationDate(Guid transferGuid)
{
ActionResult result = null;
var errorModel = new ContentShowError();
errorModel.IsError = false;
var xfer = MyInstance.GetFilesGuid(transferGuid);
if(xfer == null)
{
errorModel.IsError = true;
errorModel.Message = base.GetDisplayMessage(ProcessingMessagesEnum.ErrorNoDataFound);
result = PartialView(ViewNames.ErrorControl, errorModel);
}
else
{
var model = new ExtendExpiryDateViewModel();
model.Detail = xfer;
model.DaysToExpire = new ExtendDaysToExpire()
{
DaysToExpire = xfer.DaysToExpire + 7,
Id = xfer.Id
};
result = PartialView(ViewNames.ExtendExpirationDateControl, model);
}
return result;
}
2 Respuestas
2
El validador discreto solo está conectado en el evento de carga del dom original, no en las extracciones subsiguientes.
Cuando el formulario se inserta en el DOM, llame
$.validator.unobtrusive.parse("form");
para conectar el formulario para la validación.
saludos
Si
Respondido 28 ago 12, 13:08
0
Dado que este formulario es extraído por sugerencia de pista, lo he agregado a OnShow nethod.
<script type="text/javascript">
$('.ExtendExpirationDate').cluetip({
attribute: 'rel',
showTitle: true,
sticky: true,
closeText: JSGlobalVars.CloseImagePath,
ajaxCache: false,
arrows: true,
dropShadow: false,
activation: 'click', //click, hover
height: 'auto',
closePosition: 'title',
width: '400px',
onShow: function (ct, ci) {
$.validator.unobtrusive.parse("ExtendExpirationDateForm"); //client side validation
}
});
</script>
Cuando lo anterior no funcionó, lo agregué a mi control. Todavía no hay suerte.
<script type="text/javascript">
$(document).ready(function() {
$.validator.unobtrusive.parse("ExtendExpirationDateForm"); //client side validation
});
</script>
Ambos anteriores, los copié usando firebug 1.10.2.
Respondido 28 ago 12, 18:08
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas asp.net-mvc-3 validation or haz tu propia pregunta.
No está trabajando. He hecho los siguientes 2 (en mi respuesta a continuación): aprendiendo...
Hola, no podrá encontrar el formulario en ese selector, coloque un # delante de la identificación o simplemente use "formulario" como en mi respuesta: Slicksim
Gracias por tu ayuda. Estoy utilizando indicios en el programa y cambié a "formulario" - aprendiendo...