【问题标题】:How do I make a textbox readonly only for a specific MVC Action?如何为特定的 MVC 操作设置只读文本框?
【发布时间】:2016-02-22 10:57:10
【问题描述】:

标题可能令人困惑,所以这是我的问题: 仅当我的操作用于编辑(类似于 EditLocation)并且我的操作用于添加新记录(AddLocation)时,我才希望在我的视图中使用只读文本框,我想要一个可编辑的文本框。

我的 ff。代码有效,但我想知道是否有“更清洁”的解决方案

@using (Html.BeginForm(Model.Location.Id == 0 ? "AddLocation" : "EditLocation", "Location"))
    {
        <fieldset>
            @Html.HiddenFor(x => x.Location.Id)
            @Html.HiddenFor(x => x.Location.CompanyGroupId)
            @Html.HiddenFor(x => x.CompanyGroup.Id)
            @Html.HiddenFor(x => x.CompanyGroup.Code)

            <div class="form-group">
                <strong><span>@ResourcesCommon.Location_Code</span></strong>
                @if (Model.Location.Id == 0)
                {
                    @Html.TextBoxFor(x => x.Location.Code, new { @class = "form-control" })
                    @Html.ValidationMessageFor(x => x.Location.Code)
                }
                else
                {
                    @Html.TextBoxFor(x => x.Location.Code, new { @class = "form-control", @readonly = "readonly" })
                    @Html.ValidationMessageFor(x => x.Location.Code)
                }

            </div> ...

谢谢,祝你有个美好的一周!

【问题讨论】:

  • 一种选择是创建您自己的HtmlHelper 扩展方法(例如refer this answer),但实际上,您应该使用2 个视图(并为常见的html 使用部分)
  • 我完全同意创建两个单独的视图,但应用程序的所有者想要一个视图以实现可重用性。
  • 认真的吗?它是维护的噩梦并且难以调试。如果他们想要可重用性,那么对视图的公共部分使用部分。
  • 我同意,投票赞成你的评论:D

标签: asp.net-mvc model-view-controller razor razorengine


【解决方案1】:

这可能会对您有所帮助:

@Html.TextBoxFor(x => x.Location.Code, new Dictionary<string, object>() .AddIf(true, "@class", "form-control") .AddIf(Model.Location.Id != 0, "@readonly", "readonly"))

// This returns the dictionary so that you can "fluently" add values
    public static IDictionary<TKey, TValue> AddIf<TKey, TValue>(this IDictionary<TKey, TValue> dictionary, bool addIt, TKey key, TValue value)
    {
        if (addIt)
            dictionary.Add(key, value);
        return dictionary;
    }

我从很久以前的另一个 stackoverflow 帖子中获取它,我没有链接。

【讨论】:

  • 这很有趣,要试试。
  • 如果你觉得有趣;如果它有帮助并且如果您发现它是一个“更清洁”的解决方案,请不要忘记接受答案:)
【解决方案2】:

你可以做这样的事情(但它会产生更多的代码):

@Html.TextBoxFor(x => x.Location.Code, new { @class = "form-control", @id="myInput" })

然后添加一些js:

$(document).ready(function() {
    $('#myInput').attr('readonly', @Html.Raw(Model.Location.Id != 0? "true" : "false"));
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-09
    • 1970-01-01
    • 2017-05-27
    • 1970-01-01
    • 2018-05-09
    • 1970-01-01
    • 2018-12-29
    • 1970-01-01
    相关资源
    最近更新 更多