在MVC视图中,当发布表单时,request包含表单值,而所有模型字段都为0

时间:2012-03-05 16:50:56

标签: asp.net-mvc visual-studio-2010 post model controller

使用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
}

1 个答案:

答案 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。