Asp.net mvc 4 从视图获取控制器中的formcollection数据

Asp.net mvc 4 从视图获取控制器中的formcollection数据,asp.net-mvc-4,Asp.net Mvc 4,MVC很新,也许我在这里做错了什么。所以我有一个看法 @Scripts.Render("~/bundles/jquery") @using (Html.BeginForm()) { <div> <label>Start Date : </label> <input readonly="true" type="text" id="startDate" style="Width:150px" />

MVC很新,也许我在这里做错了什么。所以我有一个看法

@Scripts.Render("~/bundles/jquery")


@using (Html.BeginForm())
{

    <div>
        <label>Start Date : </label>
        <input readonly="true" type="text" id="startDate" style="Width:150px" />
        <br />
        <label>End Date : </label>
        <input type="text" id="endDate" readonly="true" style="Width:150px" />
        <br />
        <button>Submit</button>
        <br />
    </div>

}

<script type="text/javascript">
    jQuery(function () {
        jQuery('#startDate').datepicker();
        jQuery('#endDate').datepicker();
    });
</script>
问题是FormsCollection只是空的。因此没有数据从视图传送到控制器。我在网上看到过这样的例子。我是否缺少一些配置,或者需要做一些其他事情才能获得FormsCollection


谢谢

您的HTML输入字段上有只读。这些字段不是发布到服务器的,而是设计的。尝试删除readonly属性,它应该可以工作


编辑:看来我在这个问题上错了。只读字段实际上会传递给服务器,禁用的字段则不会。在您的案例中,问题在于缺少name属性。如果您禁用了输入字段,我的答案可能是正确的。

但是我希望这些字段是只读的,这样用户就可以只从日期选择器中选择日期。任何解决方法。我注意到的另一件事是,您需要有一个name属性,因为在MVC中,属性是按名称而不是按Id映射的
 public ActionResult Reports()
        {

            return this.View();
        }


    [HttpPost]
    public ActionResult Reports(FormCollection form)
    {

        DateTime start = Convert.ToDateTime(form["startDate"].ToString());
        DateTime end = Convert.ToDateTime(form["endDate"].ToString());
        //Something with dates

    }