【问题标题】:how to pass custom parameter through submit button in mvc4如何通过mvc4中的提交按钮传递自定义参数
【发布时间】:2013-02-08 06:08:12
【问题描述】:

大家好,我正在使用 mvc4 创建一个登录页面,其中登录凭据是从数据库中获取的。在数据库中,相关表包含 3 列,即:useridpasswordpartnerid。当用户输入他的凭据并单击提交按钮时,如果登录成功,他将被带到一个地址如下的页面:

http://localhost:58361/Home?result1=true

这是我的提交按钮代码:

<input type="submit" value="Login" class="login_button" onclick="return validateLoginPage()" />

这里的 validateLoginPage 是一个 js 函数,它检查是否有任何输入字段没有留空。

我的要求是点击提交按钮时,用户被重定向到的页面地址如下所示:

http://localhost:58361/Home?result1=true?partnerid='somevalue'

partnerid 值取自数据库并存储在 ViewData 中

如何做到这一点?提前致谢

编辑

这是提交按钮的操作结果

    public ActionResult Index(LoginModel model,string res)
    {
        LoginUser = model.Userid;
        LoginPassword = model.Password;
        verify(LoginUser, LoginPassword);
        res = result;
        if (res == "true")
        {
            return RedirectToAction("Index", "Home", new { result1 = result });
        }
        else
        {
            ViewData["alert"] = "The Login Credentials are Incorrect";
            return View();
        }
    }

verify 方法通过数据库验证登录凭据是否正确,并返回字符串值 "result" 为真或假

【问题讨论】:

  • 您能否发布执行验证和构建localhost:58361/Home?result1=true# 链接的操作结果
  • 澄清一下,您希望用户在提交凭据并通过身份验证后最终访问上述 URL?您将获得使用 partnerid 的地点/时间是在身份验证之后?

标签: javascript asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4


【解决方案1】:

如果我对您的理解正确,您想提交一个引导用户访问的表单

Home?result1=true?partnerid='somevalue'

我将其解释为使用 null 操作(默认为 Index)进入 Home Controller 并始终传递 result1=true 和来自 ViewData 的 partnerid

    @using(Html.BeginForm(null, "Home", FormMethod.Get, 
new { result1=true, partnerid='@(ViewData["somevalue"])' })) //for query string

警告: 正如 Karthik 认真指出的那样,此代码未经测试。更能证明这一点:

【讨论】:

  • @DaveA,如果数据很敏感,最好使用 POST 而不是 GET。
  • @Murali,我同意一般原则和最佳实践。在这种情况下,我试图不带偏见地回应 OP。这意味着查询字符串(获取)。但我同意你的观点。
  • +1,我喜欢这种使用表单发布数据的方式。在我曾经有一个隐藏变量之前:(
  • @Murali,我相信不同的方式可以满足不同的需求;)
  • 您的方法也减少了额外的 DOM 元素和响应大小 :)
【解决方案2】:

创建一个隐藏的输入来保存你的值,如下所示:

<input type="hidden" value="XXX" name="refNameHere" />

【讨论】:

  • 我添加了我忘记的名称属性。还要确保您的表单方法设置为 GET。如果我正确理解您的问题,那应该可以正常工作。
【解决方案3】:

假设我已经正确理解了您的问题,并且您的 Home Index 控制器方法看起来像这样

public ActionResult Index(int partnerid)
{
    ViewBag.PartnerId = partnerid;
    return View();
}

您应该可以在登录方法中执行此操作

public ActionResult Login()
{
    // Authentication stuff goes here
    return RedirectToAction("Index", "Home", new { partnerid = 1 });
}

由于您为处理登录的操作添加了代码,从而简化了我的编辑。 您所要做的就是从您的数据源中获取 partnerid,将其放入字符串中并将其包装在 '' 中,然后更改

return RedirectToAction("Index", "Home", new { result1 = result });

return RedirectToAction("Index", "Home", new { result1 = result, partnerid = partnerId });

那么你必须在你的 HomeController 上添加一个 Index 操作来获取名为 result1 和 partnerid 的字符串参数,一切都应该正常工作

【讨论】:

  • 我明白你想要什么。我觉得可以改进它以更好地满足 OP 问题。如果您愿意改进它,我很乐意投票。
  • 错过了这个。很大的改进,不确定它是否完全符合 OP,但我的也没有。继续努力。 @pmacnaughton
  • 我觉得标题可能有点误导,如果用户在身份验证后最终到达提到的 URL 时实际请求的内容,并且 partnerid 也只能在身份验证后获得.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-02
  • 1970-01-01
  • 2015-02-10
  • 1970-01-01
  • 2012-02-22
  • 2018-11-19
相关资源
最近更新 更多