0

我是MVC3的新手。我的“编辑”视图上有一个 [生成密码] 按钮。我需要执行在“Admin”控制器中定义的函数 GeneratePsw(),该函数在显示包含 GeneratePsw() 返回的值的模式之前返回一个字符串。

我还尝试将值放在 ViewBag.pwd 中,而不是将其返回并从模态中读取。没有成功

换句话说:

用户确实单击[Generate Password]按钮。然后GeneratePsw()调用并返回一个字符串。Bootstrap 模式应该会自动出现,并在标签中显示该值。

在我看来.....

<a href="#1" role="button" class="btn btn-primary btn-small" data-toggle="modal" onclick="location.href='@Url.Action("GeneratePsw", "Admin")';return false;"><i class="icon-lock icon-white"></i> Generate Password</a>


</div>


<div id="1" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-header">
   <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
         <h3 id="myModalLabel">Password generated</h3>
 </div>
 <div class="modal-body">
      <p><strong>Password: @(ViewBag.pwd)</strong></p>
  </div>
  <div class="modal-footer">
        <button class="btn" data-dismiss="modal" aria-hidden="true">OK</button>

  </div>
</div>


</td>

我的 GeneratePsw() 函数:

[HttpPost]
public ActionResult GeneratePsw()
{

    HomeBridgeEntities ddbb = new HomeBridgeEntities();
    SqlConnection Cn = new SqlConnection(((System.Data.EntityClient.EntityConnection)ddbb.Connection).StoreConnection.ConnectionString);
    SupPassGenerator sup = new SupPassGenerator(Cn);

    string psw = sup.CreateRandomPassword(9);

    ViewBag.psw = psw;

    return RedirectToAction("Edit");

}
4

1 回答 1

1

所以我的理解是你想作为一个ajax调用来做这个?即不重新加载整个页面?我还假设您使用的是 jQuery?

您可以通过回发到返回 JSON 的控制器来做到这一点。这可能是最简单的取回方法:

控制器:

public ActionResult GeneratePsw()
{
    ...
    string psw = sup.CreateRandomPassword(9);
    var json = new { password = psw };
    return Json(json);
}

页面上的js:

$('#yourgeneratebutton').on('click', function() {
  $.getJSON('YourController/GeneratePsw', function(data) {
      $('#yourpasswordp').text(data.password);
      $('#1').modal('show');
   });

注意,我使用的是getJSON,所以你不能用HttpPost. (无论如何,您都没有发布任何数据?您要么必须更改 http 属性,要么$.post改用它。这也完全未经测试,只是一个粗略的指南。

或者,一种替代方法可能是返回一个包含模态内容的局部视图,然后显示它。

于 2013-03-14T23:34:40.857 回答