Asp.net mvc 无法将带[]的索引应用于类型为';HttpRequest&x27;

Asp.net mvc 无法将带[]的索引应用于类型为';HttpRequest&x27;,asp.net-mvc,razor,httprequest,Asp.net Mvc,Razor,Httprequest,我试图从视图的文本框中获取值 我的看法是: @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.Us

我试图从视图的文本框中获取值

我的看法是:

    @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>
我得到了标题中所说的错误。
提前谢谢你

您可以使用强类型viewmodel绑定:

@model MyDataIndexViewModel

@* other stuff *@

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

@model MyDataIndexViewModel

@* other stuff *@

@Html.TextBox("txtEmail", Model.Email)
控制器

[HttpPost]
public ActionResult Save(MyDataIndexViewModel model)
{
    var email = model.Email;
    return View();
}
或者直接使用
文本框进行模型绑定:

@model MyDataIndexViewModel

@* other stuff *@

@Html.TextBoxFor(model => model.Email)
或者,如果仍要使用
HttpRequest
成员,则可以使用集合(a
NameValueCollection
)从
txtEmail
输入检索文本:

[HttpPost]
public ActionResult Save()
{
    var email = Request.Form["txtEmail"].ToString();
    return View();
}
请注意,
Request[“txtEmail”]
不鼓励使用,因为它没有应用编译时安全性,因为键值可以从
Request.QueryString
Request.Form
或其他
HttpRequestBase
成员中检索

类似问题:

查看:

@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>
}

您可以使用索引——如果您测试OP的代码,您将看到
var email=Request[“txtEmail”].ToString()工作得很好,我很惊讶可以使用
Request[“Key”]
,但由于运行时可能会失败,所以不推荐使用它。
Controller.Request
HttpRequestBase
,并且有一个默认属性(当然绑定到模型要好得多)。OP没有向我们展示抛出错误的代码(他们的视图甚至没有表单或提交按钮,只有一个永远不会指向
[HttpPost]
方法的链接)
[HttpPost]    
public ActionResult Save()
{
    var email = Request.Form["txtEmail"].ToString();
    return View();
}