使用httpGet-MVC将视图中的字符串发送到Controller

时间:2014-09-17 14:32:24

标签: c# html asp.net-mvc

我是MVC的新手所以请耐心等待。

我正在尝试从文本框向控制器方法发送string,以便在数据库中找到对象。但是,我不知道如何在HttpGet请求中将视图中的字符串成功发送到控制器(仅限HttpPost

我视图中的代码

<div>
    <label>Email</label>
    @Html.TextBox("email")
</div>
<div class="btn btn-success">
    @Html.ActionLink("Edit RSVP", "Edit")
</div>

我的控制器中的ViewResult方法

// Problem is the email parameter is always null

[HttpGet]
public ViewResult Edit(string email)
{

    // If the email the typed is find, it will display their contents on to a RsvpForm view
    return View("RsvpForm", guestRepository.Find(email));
}

任何人都知道如何发送这个字符串,我将不胜感激。

谢谢

2 个答案:

答案 0 :(得分:1)

最简单的方法是创建一个表单,如下所示:

@using(Html.BeginForm("Edit", ControllerName, FormMethod.GET))
{
    @Html.Label("Email")
    @Html.TextBox("email")

    <input type="submit" value="Edit RSVP"/>
}

或者您可以使用Jquery在文本框值更改时更改链接(我不建议这样做):

$('input[name=email]').on('change' function()
{
    var value = $(this).val();
    var href = $('.btn').next('a').attr('href');
    href += '?email='+value;
    $('.btn').next('a').attr('href', href)
});

答案 1 :(得分:1)

像这样:

@using (Html.BeginForm("Edit", "ControllerName", FormMethod.Get))
{
    <div>
        <label>Email</label>
        @Html.TextBox("email")
    </div>
    <div class="btn btn-success">
         <input type="submit" value="Edit RSVP" />
    </div>
}

注意:我无法从您的描述中判断您是否尝试在不重新加载页面的情况下执行此操作。此选项会将页面发布到控制器,因此您将重新加载页面。

如果您希望在不发布页面的情况下加载此内容,则可以查看Ajax.BeginFormHere is a StackOverflow article with a decent primer on the AJAX form

<强>更新

对于您的示例,如果您想使用AJAX,可以执行类似的操作。这都是未经测试的,但可能接近您的需要。

首先,您可以创建一个代表您要显示的用户数据的局部视图: RsvpForm.cshtml

@model GuestData 

<div class="hdr">Name</div>
<div class="value">@Model.Name</div>
<div class="hdr">Email</div>
<div class="value">@Model.Email</div>

然后,您要确保您的控制器根据通过GET发送的电子邮件返回部分视图: GuestDataController.cs

[HttpGet]
public ActionResult Edit(string email)
{
    // If the email the typed is find, it will display their contents on to a RsvpForm view
    return PartialView("RsvpForm", guestRepository.Find(email));
}

然后创建AJAX表单以通过GET提交请求并加载局部视图而不重新加载页面:view.cshtml

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>

@using (Ajax.BeginForm("Edit", "GuestData", null, new AjaxOptions { UpdateTargetId = "UserData", HttpMethod = "Get" }, null))
{
    <div>
        <label>Email</label>
        @Html.TextBox("email")
    </div>
    <div class="btn btn-success">
        <input type="submit" value="Edit RSVP" />
    </div>
}

<div id="UserData"></div>