如何将两个文本输入传递给ActionResult方法

时间:2019-06-18 20:04:34

标签: c# asp.net asp.net-mvc visual-studio asp.net-mvc-4

我已经在一个大型项目上工作了几天。除此部分外,其他全部完成。我正在尝试将2个文本框传递到我的家庭控制器方法中。

我尝试使用“模型”。和“项目”。但没有运气。它总是传递null

<p>
    @Html.ActionLink("Display", "Home", FormMethod.Post)
</p>
@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

    <div>
        Month:<input type="text" name="Month" id="MonthInput">
        Extra:<input type="text" name="Extra" id="ExtraInput"><br /><br />
        <input type="submit" value="Add" class="btn btn-default"> <br> <br>
    </div>
}

并且在家庭控制器中是

[HttpPost]
public ActionResult Display(String Month, String Extra)
{
        if (ModelState.IsValid)
        {
             ...
             return RedirectToAction("Index");
        }
        return view;
}

我希望它通过单击“添加”按钮时在文本框中键入的任何值,但它提供空值

4 个答案:

答案 0 :(得分:0)

为了正确地映射到操作的参数,必须使用name属性。

@using (Html.BeginForm("Display", "Home"))
{
    @Html.AntiForgeryToken()
    <div>
            Month:<input type="text" name="Month" id="MonthInput">
            Extra:<input type="text" name="Extra" id="ExtraInput"><br /><br />
            <input type="submit" value="Add" class="btn btn-default">
    </div>
}

完全不相关,但是似乎您有2个嵌套的表单,并且其中一个POST到php页。那是想要的吗?

也请删除以下代码,因为它没有任何意义:

<p>
    @Html.ActionLink("Display", "Home", FormMethod.Post)
</p>

答案 1 :(得分:0)

要补充上一个答案,我建议在控制器中接受该表单作为FormCollection,因为该表单似乎与模型无关:

    [HttpPost]
    public ActionResult Display(FormCollection collection)
    {
        if (ModelState.IsValid)
        {
            string month = collection["Month"];
            string extra = collection["Extra"];

            return RedirectToAction("Index");
        }
        return View();
    }

答案 2 :(得分:0)

尝试一下

视图中

@using (Html.BeginForm("Display", "Home", FormMethod.Post))
 {
    @Html.AntiForgeryToken()

    <div>
    Month:<input type="text" name="Month" id="MonthInput">
    Extra:<input type="text" name="Extra" id="ExtraInput"><br /><br />
    <input type="submit" value="Add" class="btn btn-default"> <br> <br>
    </div>
}

在控制器中,

[HttpPost]
public ActionResult Display(SomeClass someClass)
{
    if (ModelState.IsValid)
    {
         ...
         return RedirectToAction("Index");
    }
    return view;
}

创建普通的班级名称SomeClass,根据您的要求命名,

public class SomeClass{
 public string Month {get;set;}
 public string Extra {get;set;}
}

输入的名称属性应与SomeClass的属性匹配,它将自动映射,然后可以使用someClass对象访问值

  someClass.Month and someClass.Extra  

答案 3 :(得分:0)

namespace Your.Models
{
    public class DisplayModel
    {
        public string Month {get;set;}
        public string Extra {get;set;}
    }
}

[HttpPost]
    public ActionResult Display(DisplayModel model)
    {
        if (ModelState.IsValid)
        {
            string month = model.Month;
            string extra = model.Extra;

            return RedirectToAction("Index");
        }
        return View();
    }

@using Your.Models
@model DisplayModel

@using (Html.BeginForm("Display", "Home", new { id="displayview" }))
{
    @Html.AntiForgeryToken()
    <div>
            Month:<input type="text" name="Month" id="MonthInput">
            Extra:<input type="text" name="Extra" id="ExtraInput"><br /><br />
            <input type="submit" value="Add" class="btn btn-default">
    </div>
}