使用Visual Studio 2010,MVC项目 当我的表单被提交时(目前通过javascript,但结果与提交按钮相同),操作将获得一个空模型,其中的两个字段都为零,而不是包含我在文本框中输入的值。 Request对象确实在Form集合中包含正确的名称/值对。
另一种方式的模型值工作正常 - 所以根据我的[HttpGet] CallDisplayHome()动作,表单加载文本框值为1。
如果有人知道为什么它不能通过POST返回工作,我一定会很感激。
正在使用的模型:
namespace TCSWeb.Models
{
public class CallDisplayModel
{
public int SelectedRowIndex;
public int SelectedLineID;
}
}
查看:
@model TCSWeb.Models.CallDisplayModel
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<body>
/*
There a Jscript datatable here and a bunch of scripts for working with it in the header I am skipping because I am hoping they are not relevant
*/
<div>
@using (Html.BeginForm("Testing", "CallDisplay", FormMethod.Post, new { name = "submitSelLine" }))
{
@Html.TextBoxFor(m => m.SelectedLineID)
<p>
<input type="submit" value="Log On" />
</p>
}
</div>
<button onclick="SubmitSelCallRecord()">@LangRes.Strings.calldisplay_opencallrecord</button>
我的控制器操作:
[HttpGet]
public ActionResult CallDisplayHome()
{
TCSWeb.Models.CallDisplayModel temper = new CallDisplayModel();
temper.SelectedLineID = 1;
temper.SelectedRowIndex = 1;
return View(temper);
}
[HttpPost]
public ActionResult Testing(TCSWeb.Models.CallDisplayModel cdmodel)
{
return RedirectToAction("CallDisplayHome"); //breaking here, cmodel has zero for selectedlineid
}
答案 0 :(得分:1)
您需要将CallDisplayModel变量声明为属性:
public int SelectedRowIndex { get; set; }
[Required]
public int SelectedLineID { get; set; }
您还可以添加一些验证,以确保用户提供正确的信息。
将您的帖子方法更改为以下内容:
[HttpPost]
public ActionResult Testing(TCSWeb.Models.CallDisplayModel temper)
{
//check if valid
if(ModelState.IsValid)
{
//success!
return RedirectToAction("CallDisplayHome");
}
//update error! redisplay form
return View("CallDisplayHome", temper);
}
并在视图中显示错误,如下所示:
@Html.ValidationMessageFor(m => m.SelectedLineID)
@Html.TextBoxFor(m => m.SelectedLineID)
我不确定你的submitSelCallRecord按钮正在做什么,因为它引用了省略的javascript。