0

私は次のモデルを持っています:

public class Person
{
    public int ID{get;set;}
    public string Name {get;set;}
    public string Address{get;set;}
}

一方、インデックスと呼ばれる次のビューがあります。

@model List<Person>
@{

   foreach(Person person in Model)
   {
     <a href="#" id="@person.ID">@person.Name</a>
   }
}

最後に、次のアクションがあります。

public ActionResult Index()
{
     List<Person> persons=new List<Person>();
     persons.Add(new Person(){ID=1,Name="John"});
     persons.Add(new Person(){ID=2,Name="Tom"});
     persons.Add(new Person(){ID=2,Name="Derek"});
}

ユーザーが選択した人物のインスタンスを投稿するために (いくつかの要件のためにこのアプリに ajax を使用できないため)、フォームを作成することを考えています (私のビューのアンカーをクリックしたとき)。Person インスタンスを以下に説明する別のアクションに投稿する方法を知りたいです (私のビューは人の一般的なリストに入力されているため)。

[HttpPost]
public ActionResult Index(Person person)
{
     ... Do whatever
}
4

2 に答える 2

2

あなたは間違った角度からそれに近づいています。編集する方法を提示していないPersonので、参照によって渡す必要があります(つまりPersonId)。

したがって、単純なリンクを使用してください。

// 意見:

Html.ActionLink( person.Name, "ViewPerson", new { personId = person.ID } );

//コントローラーのアクション:

public ActionResult ViewPerson(String personId) {
    Person person = GetPersonFromDatabase( personId );
}
于 2012-09-18T05:36:28.670 に答える
2

POST による解決策:

それを使用POSTするには、フォームを配置して、次のような隠しフィールドを植える必要があります

@model List<Person>
@{

   foreach(Person person in Model)
   { 
     <form action="/controller/actionresult">
     <input type="submit" value=person.Name />
     <input type="hidden" name="ID" value="@person.ID"
     <input type="hidden" name="Name" value="@person.Name"
     </form>
   }
}

そしてサーバー側で

[HttpPost]
public ActionResult Index(Person person)
{
     ... Do whatever
}

ソリューションGET:

aタグは通常 POST では機能しません。デフォルトの動作はサーバーにリソースを要求するGETことですが、javascript を使用してこの動作をオーバーライドできますが、あなたの場合はオプションではないため、試すことができます

@model List<Person>
    @{

       foreach(Person person in Model)
       {
         @Html.ActionLink(persno.Name,"Index","home",new{ID=person.ID,Name=person.Name,null);      
       }
    }

唯一の欠点は、タグの代わりに送信ボタンを使用する必要があるaことです。css スタイリングを使用して、aタグのようにボタンのスタイルを設定できます。また、この種のリクエストにカスタム ルートを設定していない場合、URI には次のようなクエリ文字列パラメータが含まれます。

http://yourdomain/home/index?ID=1&Name=john
于 2012-09-18T05:25:00.123 に答える