从Html.TextBoxFor获取价值

时间:2012-01-05 07:08:35

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

我希望从我的asp.net mvc视图中获取文本框中的值。

 <%: Html.TextBoxFor(m => m.UserName, new { @class = "flat" })%>

2 个答案:

答案 0 :(得分:5)

如果要从表单发布中获取值,MVC会自动将其绑定到与该属性名称匹配的任何参数。因此,如果您将表单发布到操作MyPost,它将如下所示:

public ActionResult MyPost(string UserName) { //Not case sensitive, you can do userName as well
    var a = UserName;
}

如果要发布大量字段,则可能需要使用请求对象。 MVC将自动绑定具有相同名称的属性。

public class MyRequest {
    public string UserName { get; set; }
}

public ActionResult MyPost(MyRequest request)

将在帖子上填充UserName。

如果您想使用javascript取出值,您可能希望在html上添加id,如下所示:

Html.TextBoxFor(m => m.UserName, new { @class = "flat", id = "my-textbox" })

然后你可以使用jquery或任何你喜欢的东西来选择具有该名称的元素,假设你只想要那个属性而不会枚举一堆表单字段。

答案 1 :(得分:3)

假设您的文本框位于表单中,并且您提交了该文本框,则可以在您创建的模型中找到该值,或者通过formCollection这样找到:

Razor语法

@model Model_A 

@using (Html.BeginForm())
{
  @Html.TextBoxFor(m => m.UserName, new { @class = "flat" })
  <input type="submit" value="Submit"/>
}

控制器(使用以下任何一项)

public ActionResult ActionName(Model_A viewModel, FormCollection formCollection)
{       
   viewModel.UsernName

   //or       
   formCollection.GetValue("UserName").AttemptedValue

   //or       
   formCollection["UserName"]       
}

...或者如果您提交时没有form(例如使用JQuery和Javascript)

<强>的Javascript

function Submit() {

        var usr= document.getElementById('UserName').value;

        $.ajax({
            type: "POST",
            url: '@Url.Action("ActionName2")',
            data: "UserName=" + usr            
        });

        return true;
    }

您的控制器需要具有单独的属性,作为您提交的任何方法的输入属性。

<强>控制器

public ActionResult ActionName2(string UserName)
{

}