Asp.net mvc 如何使hiddenfor具有真正的价值
我的表单必须将布尔值设置为true,但用户无法与控件交互以更改此值 我认为最好的方法是使用Asp.net mvc 如何使hiddenfor具有真正的价值,asp.net-mvc,Asp.net Mvc,我的表单必须将布尔值设置为true,但用户无法与控件交互以更改此值 我认为最好的方法是使用HiddenFor,因为出于各种原因,不希望在控制器中设置它,但我无法将布尔值设置为true 我的代码 @using (Html.BeginForm()) { @Html.LabelFor(mod => mod.EmailAddress)<br /> @Html.TextBoxF
HiddenFor
,因为出于各种原因,不希望在控制器中设置它,但我无法将布尔值设置为true
我的代码
@using (Html.BeginForm())
{
@Html.LabelFor(mod => mod.EmailAddress)<br />
@Html.TextBoxFor(mod => mod.EmailAddress)
@Html.HiddenFor(mod => mod.IsSubsribed, new { value = true })
}
我需要做什么助手方法将最终呈现输入元素。那么为什么不写一个隐藏的输入元素标记呢
<input type="hidden" name="IsSubsribed" value="true" />
值中的V应该是上限,这样才能起作用
但请记住,用户仍然可以更新此值并发送它。因此,不要依赖来自客户的价值观。如果您知道这应该始终为真,请在http post操作方法(服务器代码)中使用true
,而不是依赖来自客户端浏览器的此值
简而言之,不要盲目信任来自客户端浏览器的数据。调用时可以轻松地更改它:@Html.HiddenFor(mod=>mod.issubscribed)
如果issubscribed
为true,它将呈现:
<input type="hidden" name="IsSubsribed" value="true" />
<input type="hidden" name="IsSubsribed" value="false" />
如果这确实是一个用户无法修改的参数,更好的约定是使用一个隐藏的输入来唯一标识正在编辑的对象,然后在给定主键值的控制器方法中执行健全性检查
型号
class MyModel
{
public string PrimaryKey { get; set; }
public string EmailAddress { get; set; }
}
查看
@model MyModel
@using (Html.BeginForm())
{
@Html.HiddenFor(m => m.PrimaryKey)
@Html.TextBoxFor(m => m.EmailAddress)
<button type="submit">Submit</button>
}
如果用户无法与该值交互,为什么要将其包含在视图中?为什么不在控制器的POST操作中将其硬编码为true
?您不能在模型/控制器内部将issubscribed
初始化为true吗?属性中的任何值都将绑定到控件。“用户将无法与控件交互以更改此值”
-是的,他们会。很容易。如果用户不能更改该值,则该值首先不应出现在页面上。在服务器端保留服务器端规则。@David,这是一个隐藏字段!用户如何与之交互?@MyDaftQuestions:任何用户都可以向您的服务器发送他们想要的任何数据。这是否意味着不能使用HiddenFor
?我的问题不是我该做什么,而是我该怎么做!了解差异,而不是哪种方式最好:)
class MyModel
{
public string PrimaryKey { get; set; }
public string EmailAddress { get; set; }
}
@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
}