如何在提交按钮单击时在mvc4中从视图到控制器获取文本框值

时间:2014-04-08 08:11:15

标签: c# asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4

如何在mvc4中从视图到控制器获取文本框值?如果我在控制器中使用httppost方法,则找不到页面错误。

查看

@model MVC_2.Models.FormModel

@{
    ViewBag.Title = "DisplayForm";
}

@using (Html.BeginForm("DisplayForm", "FormController", FormMethod.Post))
{
    <form>
        <div>
            @Html.LabelFor(model => model.Empname)
            @Html.TextBoxFor(model => model.Empname)
           @* @Html.Hidden("Emplname", Model.Empname)*@

            @Html.LabelFor(model => model.EmpId)
            @Html.TextBoxFor(model => model.EmpId)
           @* @Html.Hidden("Emplid", Model.EmpId)*@

            @Html.LabelFor(model => model.EmpDepartment)
            @Html.TextBoxFor(model => model.EmpDepartment)
           @* @Html.Hidden("Empldepart", Model.EmpDepartment)*@

            <input type="button" id="submitId" value="submit" />

        </div>
    </form>
}

模型

   public class FormModel
    {
        public string _EmpName;
        public string _EmpId;
        public string _EmpDepartment;

        public string Empname
        {
            get {return _EmpName; }
            set { _EmpName = value; }
        }

        public string EmpId
        {
            get { return _EmpId;}
            set {_EmpId =value;}
        }

        public string EmpDepartment
        {
            get { return _EmpDepartment; }
            set { _EmpDepartment = value; }
        }
    }

控制器

        public ActionResult DisplayForm()
        {
            FormModel frmmdl = new FormModel();
            frmmdl.Empname=**How to get the textbox value here from view on submitbutton click???**
        }

10 个答案:

答案 0 :(得分:12)

首先,您需要将按钮类型更改为“提交”。因此,您的表单值将提交给您的Action方法。

从:

<input type="button" id="submitId" value="submit" />

为:

<input type="submit" id="submitId" value="submit" />

其次,您需要在Action方法中将模型添加为参数。

[HttpPost]
public ActionResult DisplayForm(FormModel model)
    {
       var strname=model.Empname;
             return View();
    }

第三,如果您的Controller名称是“FormController”。您需要在视图中将Html.Beginform的参数更改为:

@using (Html.BeginForm("DisplayForm", "Form", FormMethod.Post))

    {
    //your fields
    }

P.S。 如果您的视图与Action方法的名称相同,即“DisplayForm”,则无需在Html.BeginForm中添加任何参数。只是为了简单。像这样:

@using (Html.BeginForm())
{
//your fields
}

答案 1 :(得分:3)

为表单发布ActionResult

[HttpPost]
public ActionResult DisplayForm(FormModel formModel)
{
    //do stuff with the formModel
    frmmdl.Empname = formModel.Empname;
}

查看Model Binding。默认模型绑定将获取已发布表单值中嵌入的数据,并从中创建对象。

答案 2 :(得分:2)

让我们用电子邮件文本框实现简单的ASP.NET MVC订阅表单。

模型

表单中的数据映射到此模型

public class SubscribeModel
{
    [Required]
    public string Email { get; set; }
}

视图

视图名称应与控制器方法名称匹配。

@model App.Models.SubscribeModel

@using (Html.BeginForm("Subscribe", "Home", FormMethod.Post))
{
    @Html.TextBoxFor(model => model.Email)
    @Html.ValidationMessageFor(model => model.Email)
    <button type="submit">Subscribe</button>
}

控制器

Controller负责处理请求并返回正确的响应视图。

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Subscribe(SubscribeModel model)
    {
        if (ModelState.IsValid)
        {
            //TODO: SubscribeUser(model.Email);
        }

        return View("Index", model);
    }
}

这是我的项目结构。请注意,“Home”视图文件夹与HomeController名称匹配。

ASP.NET MVC structure

答案 3 :(得分:1)

你的模型将作为一个对象发布在动作上,你可以在帖子上对它进行操作:

[HttpPost]
public ActionResult DisplayForm(FormModel model)
        {
            // do whatever needed
          string emp = model.EmpName; 
        }

你发布的数据总是在行动中加上 HttpPost 属性。

你的观点也有错误,就像这样:

@using (Html.BeginForm("DisplayForm", "Form", FormMethod.Post))
{
        <div>
            @Html.LabelFor(model => model.Empname)
            @Html.TextBoxFor(model => model.Empname)
           @* @Html.Hidden("Emplname", Model.Empname)*@

            @Html.LabelFor(model => model.EmpId)
            @Html.TextBoxFor(model => model.EmpId)
           @* @Html.Hidden("Emplid", Model.EmpId)*@

            @Html.LabelFor(model => model.EmpDepartment)
            @Html.TextBoxFor(model => model.EmpDepartment)
           @* @Html.Hidden("Empldepart", Model.EmpDepartment)*@

            <input type="button" id="submitId" value="submit" />

        </div>

}

答案 4 :(得分:0)

来自隐藏字段的模型值?我推荐如下所示的强类型方法:

public ActionResult DisplayForm(string Emplname, string Emplid, string Empldepart)

答案 5 :(得分:0)

有两种方法可以做到这一点。

第一个使用TryUpdateModel

    public ActionResult DisplayForm()
    {
        FormModel frmmdl = new FormModel();
        TryUpdateModel (frmmdl);

        // Your model should now be populated
    }

另一个更简单的版本只是将模型作为动作[HttpPost]版本的参数:

    [HttpPost]
    public ActionResult DisplayForm(FormModel frmmdl)
    {
        // Your model should now be populated
    }

答案 6 :(得分:0)

如下所示更改您的控制器。

[HttpPost]
public ActionResult DisplayForm(FormModel model)
{
   var Empname = model.Empname;
}

答案 7 :(得分:0)

[HttpPost]
 public ActionResult DisplayForm(FormModel model)
 {
     FormModel frmmdl = new FormModel();
     frmmdl.Empname=**How to get the textbox value here from view on submitbutton //click???**
 }

model.Empname将具有值

答案 8 :(得分:0)

您需要同时拥有Get和Post方法:

[HttpGet]
public ActionResult DisplayForm()
    {
       FormModel model=new FormModel();
             return View(model);
    }
[HttpPost]
public ActionResult DisplayForm(FormModel model)
    {
       var employeeName=model.Empname;
             return View();
    }

答案 9 :(得分:0)

[HttpPost]
public ActionResult DisplayForm(FormModel model)
{
    var value1 = model.EmpName;
}