我有一个用户可以编辑表单的应用程序。这是我的代码:
Controller和ViewModel:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Edit(MyGlobalObject MyGlobalObject)
{
MyGlobalObject.Save();
return View();
}
}
public class MyGlobalObject
{
public MyObjectToEdit MyObjectToEdit { get; set; }
}
public class MyObjectToEdit
{
public int MyProperty { get; set; }
public string MyProperty1 { get; set; }
public bool MyProperty2 { get; set; }
}
我的剃刀观点:
@model TestAppliWeb.Controllers.MyGlobalObject
@using (Html.BeginForm("Edit", "HomeController"))
{
@Html.AntiForgeryToken()
@Html.EditorFor(m => m.MyObjectToEdit)
}
一切都运作良好。但我想为这个表单带来一个新功能,具体取决于某个条件,本身取决于MyObjectToEdit的MyProperty2,我想继续显示表单但禁用它:所有表单必须显示给用户但他不能编辑任何内容并单击“保存”。
如果MyProperty2为true,表单将继续可编辑,否则,必须禁用表单。但我不知道如何用剃须刀中的最少代码来影响它,以及表格的渲染。我有一个解决方案,但似乎也是'#34;不清洁" :我使用javascript和css禁用了表单的所有元素。
是否有任何mvc html助手或类似的内容在剃须刀视图中写入以禁用表单。
提前感谢您的帮助
答案 0 :(得分:1)
我通常使用jQuery来禁用和启用输入字段。
禁用:
$('#idVar').prop("disabled", true);
启用:强>
$('#idVar').prop("disabled", false);
答案 1 :(得分:0)
您可以做的事情如下:
创建一个帮助程序来保存所有表单内容
@helper FormContent()
{
@Html.EditorFor(m => m.MyObjectToEdit)
}
在视图模型(或ViewBag)中保存一个变量,表示此表单是否应显示为readonly,然后在Razor视图中读取该值
@if (Model.IsReadOnly)
{
<fieldset disabled="disabled">
@FormContent()
</fieldset>
}
else
{
@using (Html.BeginForm("Edit", "HomeController"))
{
@Html.AntiForgeryToken()
@FormContent()
<input type="submit" id="submitButton" />
}
}
将字段集设置为disabled将禁用其中的所有控件。您还可以使用CSS删除任何您不想要的字段集格式。
您还可以获得不呈现实际表单标签或提交按钮的好处,因为它是只读的。