C# 更新控制器中的模型
所以我刚开始做一个新的mvc项目。我自己制作了一个日历,上面显示了一个月的天数。它有两个按钮,可以让你在一年中获得C# 更新控制器中的模型,c#,asp.net-mvc,C#,Asp.net Mvc,所以我刚开始做一个新的mvc项目。我自己制作了一个日历,上面显示了一个月的天数。它有两个按钮,可以让你在一年中获得返回和前进个月。所以我的问题是我已经为它编写了空Javascript。逻辑在模型中 现在每次某人。例如点击Forth按钮,视图将创建一个HttpPost,该HttpPost应将带有逻辑的模型发送给控制器 控制器应更新该值,并发送带有更新模型的“新视图” 这里有一个小演示,它更容易解释我的问题。 在本例中,我希望每次sb时将(Model)-变量“Number”增加1。点击按钮。但是我不
返回
和前进
个月。所以我的问题是我已经为它编写了空Javascript。逻辑在模型中
现在每次某人。例如点击Forth
按钮,视图将创建一个HttpPost,该HttpPost应将带有逻辑的模型发送给控制器
控制器应更新该值,并发送带有更新模型的“新视图”
这里有一个小演示,它更容易解释我的问题。
在本例中,我希望每次sb时将(Model)-变量“Number”增加1。点击按钮。但是我不想使用Javascript。那有可能吗
当前状态:
如果我点击按钮添加,变量“Number”将增加1,只增加一次。
后来它什么也没做。不知何故,模型没有更新回视图。我做错了什么
型号
public class TestModel
{
public int Number = -10;
}
查看
@model MyProject.Models.TestModel
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
<h4>TestModel</h4>
<hr />
</div>
@using (Html.BeginForm())
{
@Html.DisplayFor(model => model.Number)
<p>
<input id="BtnAdd" name="myButton" type="submit" value="Add" />
</p>
}
</body>
</html>
谢谢你的帮助!=) 您正在使用
@Html.DisplayFor(model=>model.Number)
,它不会将数据传回控制器。将@Html.HiddenFor(model=>model.Number)
添加到视图中的表单中,然后将隐藏值传递回控制器
根据
如果属性类型为基元类型(整数、字符串等),则该方法将呈现表示属性值的字符串
表单中不会提交普通字符串,而会提交隐藏的输入。您正在使用的
@Html.DisplayFor(model=>model.Number)
,它不会将数据传回控制器。将@Html.HiddenFor(model=>model.Number)
添加到视图中的表单中,然后将隐藏值传递回控制器
根据
如果属性类型为基元类型(整数、字符串等),则该方法将呈现表示属性值的字符串
表单中不会提交普通字符串,而会提交隐藏的输入。问题是,每次发布表单时,MVC都会尝试进行模型绑定,因此它会为您创建一个新的对象
TestModel
类,在该类中,您将此字段的默认值设置为-10。因此它将使用该值
除非将此字段更改为具有get
和set
的属性,否则Model binder无法(从发布的数据)为其设置值
所以像这样更改视图模型
public class TestModel
{
public int Number {set;get;};
}
根据需要在GET操作中设置初始值
public ActionResult Index()
{
var vm=new TestModel { Number =10 };
return View(vm);
}
当用户提交表单时,您需要再次从表单发送更新后的Number
值。请将该值保存在表单中的隐藏字段中,以便新值可用
@using (Html.BeginForm())
{
@Html.HiddenFor(model => model.Number)
@Html.DisplayFor(model => model.Number)
<p>
<input id="BtnAdd" name="myButton" type="submit" value="Add" />
</p>
}
问题是,每次发布表单时,MVC都会尝试进行模型绑定,并为此创建一个新的对象
TestModel
类,在该对象中,您将该字段的默认值设置为-10。因此它将使用该值
除非将此字段更改为具有get
和set
的属性,否则Model binder无法(从发布的数据)为其设置值
所以像这样更改视图模型
public class TestModel
{
public int Number {set;get;};
}
根据需要在GET操作中设置初始值
public ActionResult Index()
{
var vm=new TestModel { Number =10 };
return View(vm);
}
当用户提交表单时,您需要再次从表单发送更新后的Number
值。请将该值保存在表单中的隐藏字段中,以便新值可用
@using (Html.BeginForm())
{
@Html.HiddenFor(model => model.Number)
@Html.DisplayFor(model => model.Number)
<p>
<input id="BtnAdd" name="myButton" type="submit" value="Add" />
</p>
}
我只是按照u和Slappywag告诉我的那样做了改变。但不知何故,它仍然只更新了一些。就你而言。值是10,点击按钮后,它到达11并停留在那里。顺便说一句,我没有触摸索引(POST)。它仍然是一样的method@manuchao您需要清除模型状态字典。看我更新的答案。我只是做了u和Slappywag告诉我的更改。但不知何故,它仍然只更新了一些。就你而言。值是10,点击按钮后,它到达11并停留在那里。顺便说一句,我没有触摸索引(POST)。它仍然是一样的method@manuchao您需要清除模型状态字典。请参阅我的最新答案。