在MVC中获取输入字段的值

时间:2014-07-01 18:39:59

标签: c# asp.net-mvc entity-framework checkbox

我对MVC有点新意,也许我只是误解了一些东西,但我无法理解如何以优雅的方式做到以下几点: 我有以下实体,我还没有更新: 型号:

public class Entity
    {
        [Key]
        public int Id { get; set; }
        public DateTime Created { get; set; }
        public int FieldInt { get; set; }
        public DateTime FieldDate { get; set; }
        public int FieldOther {get; set; }
    }
}

查看: 我的视图显示了一串带有复选框的文本行。复选框由两个数据属性标识:data-field-int和data-field-date,这是以下内容。

@html.BeginForm("Confirm", "Home", FormMethod.Post) {
...
<input type='checkbox' data-field-int="1" data-field-date="2014/01/01" />
<input type='checkbox' data-field-int="1" data-field-date="2014/02/02" />
<input type='checkbox' data-field-int="1" data-field-date="2014/03/03" />
...
<button id="ConfirmButton" type="submit" class="btn btn-primary">Confirm</button>
}

控制器中我想要的是当按下ConfirmButton时,为每个复选框创建一个Entity对象,该复选框使用fieldInt和fieldDate的值分别用data-field-int和data-field-date属性填充。< / p>

我可以通过使控制器操作将FormCollection作为输入并通过在fieldInt和fieldDate的串联的复选框上放置name属性,然后在控制器中分离它们并更新db来实现。但似乎会有更好的方法,因为MVC在Entity Framework中非常聪明。

我希望你们能帮助我理解

谢谢你, 彼得

2 个答案:

答案 0 :(得分:1)

这个问题由两部分组成:

1。 最好在razor视图中指定 @model ,并使用将模型作为参数的lambda表达式的辅助方法。

@model MyType

html.Textbox(model => model.FieldOther,...)

然后您创建采用模型的操作

[HttpPost]
ActionResult MyAction(MyModel model) {
 ....
}

Mvc将尝试创建模型的实例并将表单字段映射到模型属性。

2

您可以将实体用作模型,但相信我,所谓的数据传输对象和/或视图模型是出于某种原因而创建的,随着应用程序的发展,单个视图也会进化,以便操纵来自许多相关数据库实体的数据。

答案 1 :(得分:1)

欢迎来到MVC。

- 使用具有模型实体的剃刀引擎是最佳实践。

- 在上面提到的代码中,您需要设置类似这样的内容

@using ( Html.BeginForm("Confirm", "Home", FormMethod.Post))

- 你是新尝试使用带有选定模板的强类型视图,为你生成剃刀代码,即你可以深入分析

- 最后只使用model x作为[HttpPost]操作方法的参数,并将这些实体转换为实体框架实体并保存在DB中

另外: 数据属性不包含在随表单发布的数据中,因此无法在控制器操作中读取它们。请尝试使用隐藏字段

@Html.HiddenFor(m => m.FieldInt)<input type="hidden" name="FieldInt" value="1234" /> //做同样的休息

传递静态然后@{Model.phoneno = "1234"}