asp.net 如何根据ViewModel中的值启用/禁用按钮?

qqrboqgw  于 2023-01-10  发布在  .NET
关注(0)|答案(3)|浏览(138)

在将ViewModel传递给View之前,我将以下值设置到ActionMethod中:

if(toDateNullEntries.Count > 0)
{
    locationsHistoryVM.IsOpen = false;
}
else
{
    locationsHistoryVM.IsOpen = true;
}

在我看来,我有以下Button,这是disabled从一开始。

<div class="col-md-12 text-center">
    <button type="submit" value="Create" class="btn bgm-orange waves-effect mybtn" id="LocateSubmitButton" disabled>SAVE</button>
</div>

现在,如果ViewModel中的IsOpen值是true,我想将其enable,否则,我想将其保持为disabled,我该怎么做呢?

    • 编辑**

我尝试通过ViewBag发送IsOpen值,然后使用jQuery按以下方式检查该值:

if(@ViewBag.IsOpen === "false"){
    $('#LocateSubmitButton').removeAttr("disabled");

})

但是,在这种情况下,我得到了以下错误:
未捕获引用错误:未定义False
在执行Inspect Element时,我看到代码正在尝试比较False === false
我不想继续使用ViewBag的原因是因为我知道这是一个不好的做法,我想使用ViewModel。有没有办法使用ViewModel实现同样的做法?

nx7onnlm

nx7onnlm1#

可以使用条件属性:

<button disabled="@(Model.IsOpen == false)">SAVE</button>

如果条件的计算结果为true,则属性将存在,否则属性将不存在。

vu8f3i0k

vu8f3i0k2#

以下内容使“disabled”的输出基于模型中的值成为条件:

<button type="submit" value="Create" class="btn bgm-orange waves-effect mybtn" id="LocateSubmitButton" @if (!Model.IsOpen) { <text>disabled</text> }>SAVE</button>

如果你想做你在ViewBag上尝试过的事情,它看起来会像这样:

if("@ViewBag.IsOpen" === "False"){
    $('#LocateSubmitButton').removeAttr("disabled");
})

请注意,在项周围加上引号,这样比较在运行时就变成“False”===“False”。

lqfhib0f

lqfhib0f3#

您可以通过混合一些c#和Razor代码来实现这一点,如下所示:

<button class="btn"
        title="Button that can be disabled conditionally by view model property on Razor template\HTML"
        type="button"
        @{
            if (ViewModel.BooleanProperty == true)
            {
                @:disabled="disabled"
            }
         }>

根据BooleanProperty的值,disabled属性将被添加到按钮的HTML代码中;否则disabled将根本不存在,并且按钮将保持启用。

相关问题