Asp.net mvc 4 MVC:将值从文本框传递到控制器操作

Asp.net mvc 4 MVC:将值从文本框传递到控制器操作,asp.net-mvc-4,Asp.net Mvc 4,我是MVC新手。基本上,我需要将文本框中输入的值从我的视图传递给控制器操作方法。当我在文本框中输入值并单击enter按钮时,我需要在屏幕上显示值。我目前无法这样做。请在下面找到我的代码 模范班 public class ProteinTrackingService { public int? Total { get; set; } public int Goal { get; set; } public void AddProtein(

我是MVC新手。基本上,我需要将文本框中输入的值从我的视图传递给控制器操作方法。当我在文本框中输入值并单击enter按钮时,我需要在屏幕上显示值。我目前无法这样做。请在下面找到我的代码 模范班

 public class ProteinTrackingService
    {
        public int? Total { get; set; }
        public int Goal { get; set; }

        public void AddProtein(int? amount)
        {
            Total += amount;
        }

    }
控制器类

 public class ProteinTrackerController : Controller
    {

        ProteinTrackingService proteinTrackingService = new ProteinTrackingService();
        // GET: ProteinTracker
        public ActionResult Index()
        {
            ViewBag.Total = proteinTrackingService.Total;
            ViewBag.Goal = proteinTrackingService.Goal;
            return View();
        }

        // GET: ProteinTracker/Details/5

        public ActionResult AddProtein(ProteinTrackingService model)
        {
            proteinTrackingService.AddProtein(model.Total);
            ViewBag.Total = proteinTrackingService.Total;
            ViewBag.Goal = proteinTrackingService.Goal;

            return View("Index");
        }


    }
景色

using (Html.BeginForm("ProteinTracker", "AddProtein",FormMethod.Post))
{
    @Html.AntiForgeryToken()



        <form>
            <div class="form-horizontal">
                <h4>Protein Tracker</h4>
                <hr />

                Total : @ViewBag.Total
                Goal  : @ViewBag.Goal

                <input id="Text1" type="text" value="TextInput" />  <input type="Submit" value="Add"  />



            </div>
        </form>

}

}

首先,请使用此语法

using (Html.BeginForm("ProteinTracker", "AddProtein", FormMethod.Post))
当html生成时,已经创建了一个表单标记。无需在其中再次创建from标记

因此,出于您的需要,在视图中,您需要为输入字段指定一个名称

 <input id="Text1" type="text" value="TextInput" name="textname"/>

它将把您的文本字段值从视图传递到控制器。为了澄清您的概念,您可以访问您需要将
HttpPost
属性添加到您的操作中。查看您的表单
@使用(Html.BeginForm(“AddProtein”、“proteinker”、FormMethod.Post))
,显然您正在向控制器发送
Post
请求

[HttpPost]
public ActionResult AddProtein(ProteinTrackingService model)
{
    proteinTrackingService.AddProtein(model.Total);
    model.Total = proteinTrackingService.Total;
    model.Goal = proteinTrackingService.Goal;

    return View("Index",model);
}

不要使用
ViewBag
将值传递给视图-初始化模型并设置其属性,然后将模型传递给视图。在视图中,使用
@Html.TextBoxFor(m=>m.Total)
等绑定到您的模型。您的手动Html甚至没有name属性,因此不会提交任何内容。建议您访问MVC站点,通过教程了解基本内容。您也有无效的html(嵌套表单)-删除内部的
标记。如何初始化模型并将其传递给视图。我是否需要在index方法
var model=new proteInKingService(){Total=x,Goal=y}中执行此操作;返回视图(模型)您好,我已经修改了上面的代码,在视图中显示值时遇到问题。您好,我不明白为什么您需要提供textname作为AddProtein方法的参数。我认为模型将包含该值。如何在视图中初始化模型修改完成任务后确定。要在索引页中初始化模型,必须在视图中将模型引用设置为“@model yourprojectsolution.proteInKingService”,然后在要显示数据的位置添加@Html.Raw(model.Total)以显示模型数据
 <input id="Text1" type="text" value="TextInput" name="textname"/>
public ActionResult AddProtein(ProteinTrackingService model,string textname)
{
    // your code
    return View("Index");
}
[HttpPost]
public ActionResult AddProtein(ProteinTrackingService model)
{
    proteinTrackingService.AddProtein(model.Total);
    model.Total = proteinTrackingService.Total;
    model.Goal = proteinTrackingService.Goal;

    return View("Index",model);
}