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

どこにあるの?? <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 に答える
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 アクションで塗りつぶされたモデルを取得できるようにする必要がありますが、型固有のビューを追加していないため、フォーム コレクションを介して投稿された値にアクセスできます。

于 2013-03-11T11:56:08.273 に答える
0

KD が提案したように、すべてのフォーム要素に name 属性を追加します。

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

等...

しかし、引数の型を指定することで、モデル バインダーが厳密に型指定された値を取得できるようにします。

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

}

引数の数が快適に感じられる数を超える場合は、[フォーム フィールドに一致するプロパティを持つオブジェクトを作成するだけです。いいえ:

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 に答える