asp.net mvc:禁用mvc表单

时间:2017-01-16 20:46:25

标签: c# asp.net asp.net-mvc razor

我有一个用户可以编辑表单的应用程序。这是我的代码:

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助手或类似的内容在剃须刀视图中写入以禁用表单。

提前感谢您的帮助

2 个答案:

答案 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删除任何您不想要的字段集格式。

您还可以获得不呈现实际表单标签或提交按钮的好处,因为它是只读的。