如何使hiddenfor具有真正的价值

时间:2016-11-02 14:51:51

标签: asp.net-mvc

我的表单必须将布尔值设置为true,但用户将无法与控件交互以更改此值。

我认为最好的方法是使用HiddenFor,因为出于各种原因在Controller中设置它是不可取的,但是我不能将布尔设置为true ...

我的代码

            @using (Html.BeginForm())
            {
                @Html.LabelFor(mod => mod.EmailAddress)<br />
                @Html.TextBoxFor(mod => mod.EmailAddress)

                @Html.HiddenFor(mod => mod.IsSubsribed, new { value = true })
            }

我试过

      @Html.HiddenFor(mod => mod.IsSubsribed, new { value = true })
      @Html.HiddenFor(mod => mod.IsSubsribed, new { value = "true" })
      @Html.HiddenFor(mod => mod.IsSubsribed, new { value = "checked" })

我需要做什么

2 个答案:

答案 0 :(得分:6)

辅助方法最终将呈现输入元素。那么为什么不写一个隐藏的输入元素标签?

<input type="hidden" name="IsSubsribed" value="true" />

或者如果你想使用辅助方法,你可以覆盖explcititly值(通常帮助方法使用表达式的值(你的属性)

@Html.HiddenFor(d=>d.IsSubsribed,new { Value="true"})
Value 中的

V 应设置上限

但请记住,用户仍然可以更新此值并发送。所以不要依赖来自客户的价值观。如果您知道这应该始终为true,请在http post action方法(服务器代码)中使用true,而不是依赖来自客户端浏览器的此值

简而言之,不要盲目信任来自客户端浏览器的数据。它可以很容易地改变

答案 1 :(得分:0)

致电:IsSubsribed

如果<input type="hidden" name="IsSubsribed" value="true" /> 为真,则会呈现:

IsSubsribed

如果<input type="hidden" name="IsSubsribed" value="false" /> 为false,则会呈现:

class MyModel
{
    public string PrimaryKey { get; set; }
    public string EmailAddress { get; set; }
}

如果这确实是用户无法修改的参数,则更好的约定是使用唯一标识正在编辑的对象的隐藏输入,然后在给定主键值的控制器方法中执行健全性检查。 / p>

<强>模型

@model MyModel
@using (Html.BeginForm())
{
    @Html.HiddenFor(m => m.PrimaryKey)
    @Html.TextBoxFor(m => m.EmailAddress)
    <button type="submit">Submit</button>
}

查看

[HttpPost]
public ActionResult ProcessModel(MyModel model)
{
    if(ModelState.IsValid)
    {
        // lookup information based on model.PrimaryKey
        // process 'IsSubscribed...'
        // etc...

        // redirect to appropriate view
    }
    // invalid model state, return View for model
}

<强>控制器

onmessage