【问题标题】:Passing button value from view to controller aspnet 5将按钮值从视图传递到控制器 asp net 5
【发布时间】:2016-01-30 10:27:39
【问题描述】:

我正在构建一个 aspnet mvc6 应用程序,我想将值从 View 传递到控制器。我的视图有多个具有 ID 的按钮,我想使用我的视图模型将单击的按钮的 ID 传递给我的控制器。

控制器:

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();
    }
}

视图模型:

public class HomeViewModel
    {
        public IEnumerable<MyModel> model { get; set; }
        public int buttonID { get; set; }
    }

查看:

@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>

在视图中应该做些什么,以便我可以设置viewmodel 的“buttonID”的值,以便它在控制器中可用?

【问题讨论】:

  • 在视图中使用表单

标签: c# razor asp.net-core-mvc


【解决方案1】:

您可以将表单定义为:

<form asp-controller="Home" asp-action="Test">
    <button value="Add" name="buttonName"/>
</form> 

查看模型:

public class HomeViewModel
{
    public IEnumerable<MyModel> model { get; set; }
    public string buttonName { get; set; }
}

和控制器:

public ActionResult Test(HomeViewModel model) {
    if(model.buttonName == "Add") 
    ....
}

【讨论】:

  • 如果我们想在没有按钮的情况下传递任何自定义对象需要做什么?
  • @Ross “自定义对象”是什么意思?
  • 我的意思是视图模型中存在的模型。例如,有一个对象列表被传递给模型,我想将其中一个返回给控制器
  • @Ross 例如,您可以使用隐藏字段。然后你的模型应该包含一个以此字段命名的属性。如果您在视图中放置了&lt;input name="HiddenField" type="hidden"/&gt;,那么您的模型应该具有属性string HiddenField { get; set; }
  • @Ross 你可以阅读自定义模型绑定器,例如codeproject.com/Articles/605595/ASP-NET-MVC-Custom-Model-Binder
【解决方案2】:

您只需添加一个包含您要发送的数据的输入字段。

添加这个:

 <form asp-controller="Home" asp-action="Test">
   <input asp-for="buttonID" value="yourButtonID" type="hidden"/>
   <button value="Add"/>
 </form> 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 2018-05-06
    • 2016-06-08
    • 1970-01-01
    • 2018-12-08
    • 2018-01-17
    相关资源
    最近更新 更多