update - render partial view mvc 5 ajax
ActionLink para enviar el valor del Modelo (2)
Quiero que mi Ajax.ActionLink pase una propiedad viewModel a la acción.
Aquí está mi ViewModel
public class ViewModel
{
public string Searchtext { get; set; }
}
Mi .cshtml
@Ajax.ActionLink("Bottom3", "Bottom3",new { name = Model.Searchtext}, new AjaxOptions
{
HttpMethod = "POST",
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "pointsDiv"
})
using(Html.BeginForm("Bottom3", "Home", FormMethod.Get))
{
@Html.TextBoxFor(x => x.Searchtext)
<button type="submit">Search</button>
}
<div id="pointsDiv"></div>
}
Mi acción de controlador:
public PartialViewResult Bottom3(string name)
{
var model = db.XLBDataPoints.OrderBy(x => x.DataPointID).Take(3).ToList();
return PartialView("Partial1", model);
}
Pero el parámetro de nombre pasado a la acción siempre es nulo. ¿Cómo puedo solucionar esto?
Hice esto por un modelo mío como ese. SOLAMENTE respaldé el método HttpPost. Añada el HttpMethod = "POST" a su Ajax.ActionLink
[HttpPost]
public ActionResult Accounts(ParametricAccountsModel model)
{
if (model.Accounts == null)
{
GetAccountsForModel(model);
}
if (model.AccountIds == null)
{
model.AccountIds = new List<int>();
}
return View(model);
}
En la vista de afeitar
@Ajax.ActionLink(
"Add Account to Order", "Accounts", "Parametric", null,
new AjaxOptions() { InsertionMode = InsertionMode.Replace, UpdateTargetId = "...", HttpMethod = "POST" },
new { @id = "AddParametricAccountLink" })
El modelo tiene una lista de identificadores de cuenta seleccionados. Entonces, en javascript, modifiqué dinámicamente el href del enlace de acción.
function UpdateParametricAccountAction() {
var originalLink = ''/TradeNCashMgmt/Parametric/Accounts'';
var append = '''';
var numberOfRows = $(''#ParametricAccounts'').find(''.parametric-account- row'').size();
for (var i = 0; i < numberOfRows; i++) {
if (i != 0) {
append += ''&'';
}
else {
append = ''?'';
}
var idValue = $(''#NotionalTransactionsAccountId_'' + i).val();
append += ''AccountIds%5B'' + i + ''%5D='' + idValue;
}
$(''#AddParametricAccountLink'').attr(''href'', originalLink + append);
}
Como el correlador de modelos busca nombres de parámetros en la cadena de consulta y el envío de formularios, recogerá valores utilizando href. Así que publiqué un objeto modelo usando la cadena de consulta en mi Ajax.ActionLink. No es el método más limpio, pero funciona.
En su código ... tiene 2 formas diferentes de publicar en el servidor: el enlace y el botón de formulario.
El problema es que ActionLink no tiene forma de obtener el valor de la entrada en el lado del cliente ... solo el valor original.
Si presiona el botón Buscar, verá un valor publicado.
Ahora, puede usar algo de jQuery para modificar un ActionLink estándar (no el Ajax.ActionLink): https://.com/a/1148468/7720
O ... puedes transformar tu Formulario para hacer una publicación de Ajax en lugar de una normal: https://.com/a/9051612/7720