在ASP.NET MVC 4 Razor中,如何获取@Html.Label的值(文本)?

问题描述 投票:0回答:2

很抱歉,我已尝试搜索,但没有收到与我的问题相关的任何信息。

我的看法:

<legend>COMFIRM</legend>
    @using (Ajax.BeginForm("AdminDeleteResult", "Admin",
                            new AjaxOptions { UpdateTargetId = "div" }))
    {
        <div id="div"></div>
        <h6>ARE YOU SURE WANT TO DELETE</h6>
        <ol>
            <li>
                @Html.Label("User ID:")
                @Html.Label("userid", Model.userid)
            </li>
            <li>
                @Html.Label("Username:")
                @Html.Label(Model.username)
            </li>
        </ol>
        <button>DELETE</button>
    }
</fieldset>

我的控制器:

[HttpPost]
public ActionResult AdminDeleteResult(FormCollection form)
{
     string userid = form["userid"].ToString(); //ERROR HERE
     ...
}

我尝试用

@Html.TextBox("userid")
替换 Label,效果很好。 但我想使用标签,因为我不希望人们改变它的值。 谢谢您的帮助!

c# asp.net asp.net-mvc asp.net-mvc-4 razor
2个回答
7
投票

这不是

Label
的目的,你必须使用
input
form
的目的是收集数据,数据保存在表单元素中。

如果您不希望人们更改该值(这可以讨论),您可以制作

input
readonly
或者您可以隐藏它。

因为您的视图使用模型,您可以使用带有 lambda 表达式的 HtmlHelpers 来创建表单。

@using (Ajax.BeginForm("AdminDeleteResult", "Admin",
                        new AjaxOptions { UpdateTargetId = "div" }))
{
    <div id="div"></div>
    <h6>ARE YOU SURE WANT TO DELETE</h6>
    <ol>
        <li>
            @Html.Label(model => model.userid)
            @Html.TextBoxFor(model => model.userid, new { @readonly="readonly" })

            @* @Html.HiddenFor(model => model.userid) *@
        </li>
        <li>
            @Html.Label(model => model.username)
            @Html.TextBoxFor(model => model.username, new { @readonly="readonly" }) 
        </li>
    </ol>
    <button>DELETE</button>
}

正如 @man-nemati 提到的,最好在你的行动中使用模型

[HttpPost]
public ActionResult AdminDeleteResult(UserModel user)
{
   string userid =user.userid; // userid is storred in user
   // ...
}

0
投票

@DisplayNameFor(m => m.PropertyName) 从视图模型中的显示名称属性获取文本。

© www.soinside.com 2019 - 2024. All rights reserved.