asp.net-mvc - route - tag helpers asp net core
Establecer elemento de botón de selección marcado del controlador ASP MVC 3 (3)
Debajo hay un grupo de botones de radio que aparecen en mi vista. Puedo recuperar el elemento seleccionado a través de este código simple
string criteria = filter["criteria"];
sin embargo, no sé cómo retener el elemento seleccionado. Una vez que el controlador publique nuevamente en la vista, el botón de opción predeterminado siempre estará seleccionado.
<form method="post">
@Html.TextBox("searchValue", ViewBag.CurrentFilter as string, new { placeholder = "Search" })
<input type="image" src="@Url.Content("~/Content/Images/Filter.bmp")" alt="Filter" style="padding-top: 0px;" />
<span class="error" style="clear: both;">
@ViewBag.ErrorMessage
</span>
<a href="#" style="padding-left: 30px;"></a>
<br />
<br />
<input type="radio" name="criteria" id="bankName" value="bankName" checked="true"/>
<label for="bankName">Bank Name</label>
<input type="radio" name="criteria" id="EPURL" value="EPURL" />
<label for="EPURL">EPURL</label>
<input type="radio" name="criteria" id="specialNotes" value="specialNotes" />
<label for="SpecialNotes">Special Notes</label>
<input type="radio" name="criteria" id="email" value="email" />
<label for="email">Email</label>
<input type="radio" name="criteria" id="dynamicsId" value="dynamicsId" />
<label for="dynamicsId">Dynamics ID</label>
<input type="radio" name="criteria" id="stat" value="stat" />
<label for="fixed">Agent ID </label>
</form>
Si entiendo su necesidad correctamente, puede establecer el nombre del artículo que desea verificar en el ViewBag (o ViewData o Model) y establecer la propiedad marcada en su vista en consecuencia. Algo como esto:
<form method="post">
@Html.TextBox("searchValue", ViewBag.CurrentFilter as string, new { placeholder = "Search" })
<input type="image" src="@Url.Content("~/Content/Images/Filter.bmp")" alt="Filter" style="padding-top: 0px;" />
<span class="error" style="clear: both;">
@ViewBag.ErrorMessage
</span>
<a href="#" style="padding-left: 30px;"></a>
<br />
<br />
@{
var checkedItemName = ViewBag.CheckedItemName;
}
<input type="radio" name="criteria" id="bankName" value="bankName" checked="@((checkedItemName == "bankName"))"/>
<label for="bankName">Bank Name</label>
<input type="radio" name="criteria" id="EPURL" value="EPURL" checked="@((checkedItemName == "EPURL"))"/>
<label for="EPURL">EPURL</label>
<input type="radio" name="criteria" id="specialNotes" value="specialNotes" checked="@((checkedItemName == "specialNotes"))"/>
<label for="SpecialNotes">Special Notes</label>
<input type="radio" name="criteria" id="email" value="email" checked="@((checkedItemName == "email"))"/>
<label for="email">Email</label>
<input type="radio" name="criteria" id="dynamicsId" value="dynamicsId" checked="@((checkedItemName == "dynamicsId"))"/>
<label for="dynamicsId">Dynamics ID</label>
<input type="radio" name="criteria" id="stat" value="stat" checked="@((checkedItemName == "stat"))"/>
<label for="fixed">Agent ID </label>
</form>
La respuesta a esta pregunta terminó siendo increíblemente simple. El primer error que cometí fue no usar los controles @Html
. El segundo fue usar FormCollection
como un parámetro de entrada para el controlador de índice. Al cambiar los botones de radio a lo siguiente:
@Html.RadioButton("criteria", "bankName", true)<span>Bank Name</span>
@Html.RadioButton("criteria", "EPURL")<span>EPURL</span>
@Html.RadioButton("criteria", "specialNotes")<span>Special Notes</span>
@Html.RadioButton("criteria", "email")<span>Email</span>
@Html.RadioButton("criteria", "dynamicsId")<span>Dynamics ID</span>
@Html.RadioButton("criteria", "stat")<span>Agent ID</span>
y la firma del método Index
en el controlador para esto:
public ActionResult Index(string criteria, string searchValue)
El botón de selección seleccionado permaneció seleccionado después de la publicación posterior.
No actualice la página completa ... Use JQuery y haga una llamada Ajax
$.ajax({
url: "Your Url",
async: true,
type: ''POST'',
data: JSON.stringify({ ParameterName: Param_Value }),
beforeSend: function (xhr, opts) {
},
contentType: ''application/json; charset=utf-8'',
complete: function () { },
success: function (data) {
//Success Callback
//Code to set value to your control
}
});