我的表单必须将布尔值设置为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" })
我需要做什么
答案 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