单击按钮将参数传递给控制器

时间:2018-12-02 20:00:05

标签: asp.net-mvc

如何传递类似的参数

<input type="hidden" value= d.ID name="Action:Delete" class="btn-primary btn-sm"/>
<button type="submit">Delete</button>

回到控制器?

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SubmitEmailList()
{
    if (ModelState.IsValid)
    {
        if (Request.Form["Action:Delete"] != null)
        {
            int id value = d.ID;

            using (Entities dbcontext = new Entities())
            {
                var UpDateRecord = (from a in dbcontext.AuthorisedEmailLists
                                    where a.ID == id
                                    select a).FirstOrDefault()
            }

            return CurrentUmbracoPage();
        }
    }

    return CurrentUmbracoPage();
}

我要解析到控制器的参数是d.ID

1 个答案:

答案 0 :(得分:0)

使用您共享的代码,它将生成如下所示的HTML标记

<input type="hidden" value="d.ID" name="Action:Delete" class="btn-primary btn-sm">

请参阅,value属性仍然是字符串d.ID!如果您试图获取对象@的{​​{1}}属性值,则可能要使用ID前缀

d

您共享的服务器端代码将不会进行事件编译,特别是您尝试从已发布的表单数据中读取值并将其分配给变量的部分。以下应该可以。

<input type="hidden" value="@d.ID" name="Action:Delete" class="btn-primary btn-sm"/>

请记住, [HttpPost] public ActionResult SubmitEmailList() { if (Request.Form["Action:Delete"] != null) { var id = Request.Form["Action:Delete"]; // id is of string type. Use id as needed. } // to do : return something } 表达式返回一个Request.Form["Action:Delete"]。如果其中有一个数字值并想将其转换为string,则可以使用int之类的辅助方法,甚至更好的Convert.ToInt32

我个人不尝试显式读取Int32.TryParse,而是保留MVC模型绑定。我也可以直接使用int类型作为参数(因此,无需从字符串显式转换为数字类型)。

为此,您输入元素的Request.Form属性值应与您的操作方法参数匹配。另外,请确保您在引号(单引号或双引号)中指定属性值

name

现在您可以使用

<form method="POST" action="@Url.Action("SubmitEmailList","YourControllerName")">
   <input type="hidden" value="@d.ID" name="id" class="btn-primary btn-sm"/>
   <button type="submit">Delete</button>
</form>