问题
I'm building a aspnet mvc6 application where I want to pass values from View to controller. My view has multiple buttons having IDs and I want to pass the ID of the button which is clicked to my controller using my viewmodel.
Controller:
public class HomeController : Controller
{
private SampleDbContext _context;
private HomeViewModel _viewmodel;
public HomeController(SampleDbContext context, HomeViewModel model)
{
_viewmodel = model;
_context = context;
}
public IActionResult Index()
{
_viewmodel.model = _context.MyModel.ToList();
return View(_viewmodel);
}
public IActionResult Test()
{
var x = _viewmodel.buttonID;
return View();
}
}
ViewModel:
public class HomeViewModel
{
public IEnumerable<MyModel> model { get; set; }
public int buttonID { get; set; }
}
View:
@model MyProject.ViewModels.HomeViewModel
<table>
@foreach (var item in Model.model)
{
<tr>
<td>
<form asp-controller="Home" asp-action="Test">
<button value="Add"/>
</form>
</td>
</tr>
}
</table>
What should be done in the view such that I can set the value of 'buttonID
' of the viewmodel
so that it is available in the controller?
回答1:
You can define your form as:
<form asp-controller="Home" asp-action="Test">
<button value="Add" name="buttonName"/>
</form>
view model:
public class HomeViewModel
{
public IEnumerable<MyModel> model { get; set; }
public string buttonName { get; set; }
}
and controller:
public ActionResult Test(HomeViewModel model) {
if(model.buttonName == "Add")
....
}
回答2:
You can just add an input field that will contain the data you want to send.
add this:
<form asp-controller="Home" asp-action="Test">
<input asp-for="buttonID" value="yourButtonID" type="hidden"/>
<button value="Add"/>
</form>
来源:https://stackoverflow.com/questions/35100619/passing-button-value-from-view-to-controller-aspnet-5