35

mvcフォーム(モデルから作成)があり、送信時にパラメーターを取得したいフォームを設定してパラメーターを取得するためのコードがあります

using (@Html.BeginForm("myMethod", "Home", FormMethod.Get, new { id = @item.JobId })){
}

そして私の家のコントローラーの中に私は持っています

    [HttpPost]
    public FileStreamResult myMethod(string id)
    {
         sting str = id;

    }

ただし、常にエラーが発生します

探しているリソース(またはその依存関係の1つ)が削除されたか、名前が変更されたか、一時的に使用できなくなった可能性があります。次のURLを確認し、スペルが正しいことを確認してください。

を省略する[HttpPost]と、コードはファイルを実行しますが、変数stridはnullになります。どうすればこれを修正できますか?

編集

これは、コントローラーのmyMethodがActionResultではないために発生する可能性がありますか?メソッドがビューにバインドされているタイプActionresultのメソッドがある場合、すべてがうまく機能することに気付きました。ただし、タイプFileStreamresultをビューにバインドすることはできません。このようなメソッドにデータを渡すにはどうすればよいですか?

4

4 に答える 4

53

疑わしい場合は、MVCの規則に従ってください。

JobIDのプロパティがまだ含まれていない場合は、viewModelを作成します

public class Model
{
     public string JobId {get; set;}
     public IEnumerable<MyCurrentModel> myCurrentModel { get; set; }
     //...any other properties you may need
}

ビューを強く入力する

@model Fully.Qualified.Path.To.Model

JobIdの非表示フィールドをフォームに追加します

using (@Html.BeginForm("myMethod", "Home", FormMethod.Post))
{   
    //...    
    @Html.HiddenFor(m => m.JobId)
}

そして、コントローラーアクションのパラメーターとしてモデルを受け入れます。

[HttpPost]
public FileStreamResult myMethod(Model model)
{
    sting str = model.JobId;
}
于 2013-01-02T15:38:50.197 に答える
14

これは、formメソッドをGETとして指定したためです。

ビューのコードを次のように変更します。

using (@Html.BeginForm("myMethod", "Home", FormMethod.Post, new { id = @item.JobId })){
}
于 2013-01-02T15:26:57.843 に答える
3

を使用してHTTP'GET'リクエストを使用するフォームを指定しているようですFormMethod.Get。投稿を行うように指示しない限り、これは機能しません。これは、ActionResultに実行させたいと思われることです。これはおそらくに変更することFormMethod.Getで機能しFormMethod.Postます。

これに加えて、GetリクエストとPostリクエストがどのように機能し、これらがモデルとどのように相互作用するかについても検討する必要があります。

于 2013-01-02T15:29:24.563 に答える
3

ここで問題となるのは、クラスを指定した場合のモデルバインディングです。整数または文字列の場合、モデルバインディングは投稿中にそれを理解できます。適切にバインドするには、[FromBody]を指定する必要があります。

FormMethodで次の変更を行います

using (@Html.BeginForm("myMethod", "Home", FormMethod.Post, new { id = @item.JobId })){

}

文字列をバインドするためのホームコントローラー内で、[FromBody]を指定する必要があります

using System.Web.Http;
[HttpPost]
public FileStreamResult myMethod([FromBody]string id)
{
     // Set a local variable with the incoming data
     string str = id;

}

FromBodyはSystem.Web.Httpで利用できます。そのクラスへの参照があり、csファイルに追加されていることを確認してください。

于 2013-01-02T16:01:45.023 に答える