2011-11-10 4 views
1

こんにちは皆私は別のページの間で情報を渡そうとしていますが、どうすればよいか分かりません。別のWebページ間で情報を渡す方法

私は私が画像を選択し、他のページ(fancyBoxとの対話)を表示Html.ActionLinkをクリックすると、私は

<% using (Html.BeginForm("Save", "Envi")) 
    {%> 
     <%: Html.ValidationSummary(true)%> 

      <div class="editor-label"> 
       <%: Html.Label("Description:")%> 
      </div> 
      <div class="editor-field"> 
       <%: Html.TextBox("info", lp.Description)%> 
    ... 
      <div> 
       <%: Html.ActionLink("Change Image", "ChangeImg", "Envi", new {id=lp}, new {id="cambio"})%> 
    ... 
      <p> 
       <input type="submit" value="Save" name="<%= lp.Id %>"/> 
      </p> 
    <% } %> 
<% } %> 

内Html.ActionLinkでこのフォームを持っています。

フォームからこのページにすべてのデータを渡したいとします。今度はフォームを再度表示すると、新しいデータがあり、古いデータはありません。 どうすればいいですか?

ありがとうございました。

+0

このビューを再度呼び出すContollerは、正しいモデルを表示し、表示するデータを含んでいる必要があります。十分な情報がない場合は、「保存」および「ChangeImg」ビューのコントローラーコードも記入してください。 (合計4つのコントローラメソッド、2つのHttpGetと2つのHttpPostが必要です) – Dave

答えて

0

TempData辞書を使用することをお勧めします。これは、次のリクエストにのみ使用できます。 MSDNから引用

:それは次のアクションを呼び出す にコントローラのRedirectToActionメソッドを呼び出す前に

アクションメソッドは、コントローラのTempDataDictionary オブジェクトのデータを格納することができます。 TempDataプロパティの値は、 のセッション状態に格納されます。 TempDataDictionary値が設定された後に呼び出されるアクションメソッドは、オブジェクトから値を取得し、 を処理または表示できます。 TempDataの値は、 が読み取られるまで、またはセッションがタイムアウトするまで保持されます。この ウェイのTempDataを永続化すると、 TempDataの値が1回の要求を超えて利用できるため、リダイレクトなどのシナリオが可能になります。

これはあなたの答えです。

0

理想的には、フォームは単一のアクションに提出する必要があります。

ので、コントローラは次のようになります。次のビューモデルと

public class HomeController : Controller 
{ 
    public ViewResult Index() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult Index(ItemModel itemModel, string submit) 
    { 
     //I'm not sure why I need this but the fields display with empty results on my machine otherwise 
     ModelState.Clear(); 

     if (submit == "edit") 
     { 
      this.TempData.Add("item", itemModel); 
      return View("ChangeImage", new ImageModel { ImageName = itemModel.ImageName }); 
     } 
     else 
     { 
      //perform save here 
      return RedirectToAction("ViewAfterSavePerformed"); 
     } 
    } 

    [HttpPost] 
    public ViewResult Image(ImageModel imageModel) 
    { 
     ItemModel itemModel = (ItemModel)this.TempData["item"]; 
     itemModel.ImageName = imageModel.ImageName; 
     return View("Index", itemModel); 
    } 
} 

public class ItemModel 
{ 
    public string Description { get; set; } 

    public string ImageName { get; set; } 
} 

public class ImageModel 
{ 
    public string ImageName { get; set; } 
} 

そして、次のビュー:

インデックス:

<h2>Index</h2> 

@using (Html.BeginForm()) 
{ 
    <p>Description: @Html.EditorFor(m => m.Description)</p> 
    <p>Image: @Html.EditorFor(m => m.ImageName)</p> 
    <input type="submit" name="submit" value="edit" /> 
    <input type="submit" name="submit" value="save" /> 
} 

変更イメージ:

<h2>ChangeImage</h2> 

@using (Html.BeginForm("Image", "Home")) 
{ 
    <p>Image: @Html.EditorFor(m => m.ImageName)</p> 

    <input type="submit" name="submit" value="save image" /> 
} 

うまくいけば、これは私がかみそりの構文を使用したにも関わらず、感知することができるはずです。

関連する問題