繁体   English   中英

asp.net mvc:禁用mvc格式

[英]asp.net mvc : disable mvc form

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

控制器和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,则该表单可以继续编辑,否则,必须禁用该表单。 但是我不知道如何在剃须刀视图的呈现方式中以最少的代码来影响它。 我有一个解决方案,但似乎太“不干净”:我使用javascript和css禁用了表单的所有元素。

是否有任何mvc html帮助程序或类似的内容在razor视图中编写以禁用表格。

在此先感谢您的帮助

我通常使用jQuery禁用和启用输入字段。

禁用:

$('#idVar').prop("disabled", true);

启用:

$('#idVar').prop("disabled", false);

您可以执行以下操作:

创建一个帮助程序来保存所有表单内容

@helper FormContent()
{
    @Html.EditorFor(m => m.MyObjectToEdit)
}

在您的视图模型(或ViewBag)中,保存一个变量,该变量指示此表单是否应显示为只读,然后在Razor视图中读取该值。

@if (Model.IsReadOnly)
{   
    <fieldset disabled="disabled">
        @FormContent()
    </fieldset>
}
else
{
    @using (Html.BeginForm("Edit", "HomeController"))
    {
        @Html.AntiForgeryToken()

        @FormContent()

        <input type="submit" id="submitButton" />
    }
}

将字段集设置为禁用应禁用其中的所有控件。 您还可以使用CSS删除不需要的任何类型的字段集格式。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM