Samuel Silva
Samuel Silva

Reputation: 43

Cannot apply indexing with [] to an expression of type 'HttpRequest'

I am trying to get a value from a textbox of my View.

This is my View:

    @model MyDataIndexViewModel

@{
    <div class="row">
        <div class="col-xs-12 col-sm-12 col-md-12">
            <h1>Meine Daten</h1>
        </div>
    </div>
    var item = Model.User;
        <div class="row">
            <div class="col-xs-6 col-sm-6 col-md-6 myDataTitle">Email</div>
            <div class="col-xs-6 col-sm-6 col-md-6">
                @Html.TextBox("txtEmail", "", new { placeholder = item.Email})
            </div>
        </div>
}

<div class="row">
    <div class="col-xs-12 col-sm-12 col-md-12">
        <a class="btn btn-default pull-right" href="/ChangeMyData/Save">Speichern</a>
    </div>
</div>

This is my Controller:

   [HttpPost]
    public ActionResult Save()
    {
        var email = Request["txtEmail"].ToString();
        return View();
    }

I get the error just as it says in the Title. Thank you in advance!

Upvotes: 0

Views: 9869

Answers (2)

Tetsuya Yamamoto
Tetsuya Yamamoto

Reputation: 24957

You can either use strongly-typed viewmodel binding:

View

@model MyDataIndexViewModel

@* other stuff *@

@Html.TextBox("txtEmail", Model.Email)

Controller

[HttpPost]
public ActionResult Save(MyDataIndexViewModel model)
{
    var email = model.Email;
    return View();
}

Or use a TextBoxFor directly for model binding:

@model MyDataIndexViewModel

@* other stuff *@

@Html.TextBoxFor(model => model.Email)

Or if you still want to use HttpRequest members, Request.Form collection (a NameValueCollection) is available to retrieve text from txtEmail input:

[HttpPost]
public ActionResult Save()
{
    var email = Request.Form["txtEmail"].ToString();
    return View();
}

Note that Request["txtEmail"] is discouraged due to no compile time safety applied for it, because the key value may retrieved from Request.QueryString, Request.Form or other HttpRequestBase members.

Similar issue:

MVC TextBox with name specified not binding model on post

Access form data into controller using Request in ASP.NET MVC

Upvotes: 1

Saqib A. Azhar
Saqib A. Azhar

Reputation: 1074

VIEW:

@model MyDataIndexViewModel


@using (Html.BeginForm("Save", "CONTROLLER_NAME"))
{
<div class="row">
    <div class="col-xs-12 col-sm-12 col-md-12">
        <h1>Meine Daten</h1>
    </div>
</div>
var item = Model.User;
    <div class="row">
        <div class="col-xs-6 col-sm-6 col-md-6 myDataTitle">Email</div>
        <div class="col-xs-6 col-sm-6 col-md-6">
            @Html.TextBox("txtEmail", "", new { placeholder = item.Email, id="txtEmail"})
        </div>
    </div>
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-12">
    <a class="submit btn btn-default pull-right">Speichern</a>
</div>
</div>
}

CONTROLLER

[HttpPost]    
public ActionResult Save()
{
    var email = Request.Form["txtEmail"].ToString();
    return View();
}

Upvotes: 6

Related Questions