1

我的 HttpPost 需要一些帮助。我不知道在 HttpPost 上写什么才能在我的视图中使用我的工作代码

我写了一个代码来生成密码:

    private static string PasswordGenerator(int passwordLength, bool strongPassword)
{
    int seed = Random.Next(1, int.MaxValue);
    //const string allowedChars = "ABCDEFGHJKLMNOPQRSTUVWXYZ0123456789";
    const string allowedChars = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789";
    const string specialCharacters = @"!#$%&'()*+,-./:;<=>?@[\]_";

    var chars = new char[passwordLength];
    var rd = new Random(seed);

    for (var i = 0 ; i < passwordLength; i++)
    {
        // If we are to use special characters
        if (strongPassword && i % Random.Next(3, passwordLength) == 0 )
        {
            chars[i] = specialCharacters[rd.Next(0 , specialCharacters.Length)];
        }
        else
        {
            chars[i] = allowedChars[rd.Next(0 , allowedChars.Length)];
        }
    }

    return new string(chars);
}

现在我也有一个看法:

@{
    ViewBag.Title = "Index";
}

  @using (Html.BeginForm("Index", "PasswordGenerator", FormMethod.Post))
      {
<table class="passwordViewTable">


    <tr>
        <td>Password Length:</td>
        <td class="rechterKolom">  <input type="text" value="8" id="length_field"> (4 - 64 chars)</td>
    </tr>

    <tr>
        <td>Include Letters:</td>
        <td><input type="checkbox" id="checkbox_letters"  checked> ( e.g. abcdef) <br /></td>
    </tr>
    <tr>
        <td>Quantity:</td>
        <td>
            <select id="dropdown_quantity" class="styled">
               <option value="1">1</option>
               <option value="2">2</option>
            </select> <br />
       </td>
    </tr>

    <tr>
        <td><button type="submit" id="btn_submit">Submit</button> </td>
    </tr>
</table>
      }

现在我不知道在 httpPost 函数上写什么来让代码在视图上工作

  [HttpGet]
        public ActionResult Generate()
        {
            return View("Index");
        }

        [HttpPost]
        public ActionResult PasswordGenerator() 
        {
           ??
        }
4

3 回答 3

0

正如 KD 建议的那样,我会为所有表单元素添加名称属性。

<input type="text" name="length" value="8" id="length_field">
<input type="checkbox" id="includeLetters"  checked>

ETC...

但我会让模型绑定器通过指定参数类型为我们提供强类型值。

[HttpPost]
public ActionResult PasswordGenerator(int length, bool includeLetters, etc...) 
{

}

如果参数的数量超出了您的承受能力,只需创建一个具有 [与您的表单字段匹配的属性的对象。IE:

public class PasswordGeneratorArguments {
    public int Length {get;set}
    public bool IncludeLetters {get;set}
    etc...
}

并将其用作论据

[HttpPost]
public ActionResult PasswordGenerator(PasswordGeneratorArguments model) 
{

}
于 2013-03-11T12:03:31.047 回答
0

您所有的 html 输入都应该有“名称”属性分配给那些.. 例如

 <tr>
        <td>Password Length:</td>
        <td class="rechterKolom">  
           <input type="text" name="length_field" value="8" id="length_field"> (4 - 64 chars)
        </td>
    </tr>

这是您必须在帖子中编写的代码

[HttpPost]
  public ActionResult PasswordGenerator(FormCollection collection) 
 {
       //access your fields here like this 
       var length = collection["length_field"];
       // do the operation you need here
 }

基本上你应该在 mvc 中使用强类型视图,这样你就可以在你的 POST 操作中获得填充的模型,但是由于你没有添加任何类型特定的视图,你可以通过 Form 集合访问发布的值。

于 2013-03-11T11:56:08.273 回答
0

你哪里有??您需要输入:<nameofclass>.PasswordGenerator(...)“...”应该是您的PasswordGenerator()方法所需的参数,并且<nameofclass>应该是您的静态方法所在的类的名称。

例如,您的代码可能看起来有点像这样,在您的视图中有更多的连接:

    [HttpGet]
    public ActionResult Generate()
    {
        return View("Index");
    }

    [HttpPost]
    public ActionResult PasswordGenerator(PasswordModel model) 
    {
       <nameofclass>.PasswordGenerator(model.Password.Length, model.StrongPassword);
    }
于 2013-03-11T11:56:39.607 回答