2011-11-10 5 views
1

안녕하세요, 저는 다른 페이지간에 정보를 전달하려고합니다. 그러나 어떻게해야할지 모르겠습니다. 내가 이미지를 선택 제가 보여 Html.ActionLink 다른 페이지 (fancyBox와 대화)를 클릭하면다른 웹 페이지간에 정보를 전달하는 방법

나는

<% 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

이 뷰를 다시 호출하는 컨트롤러는 올바른 모델을 표시하고 원하는 데이터를 포함해야합니다. 그 정보가 충분하지 않으면 "저장"및 "ChangeImg"보기에 대한 컨트롤러 코드도 게시하십시오. (총 4 개의 컨트롤러 메소드, 2 개의 HttpGet 및 2 개의 HttpPost가 있어야합니다) – Dave

답변

0

TempData 사전을 사용하시는 것이 좋습니다. 다음 요청에만 사용할 수 있습니다. MSDN에서 인용

: 그것은 다음 조치를 호출 에 컨트롤러의 RedirectToAction 메소드를 호출하기 전에

액션 메소드는 컨트롤러의 TempDataDictionary 객체에 데이터를 저장할 수 있습니다. TempData 속성 값은 세션 상태에 저장됩니다. TempDataDictionary 값을 설정 한 후 호출되는 모든 동작 메서드는 개체에서 값을 가져올 수 있으며 이 처리하거나 표시 할 수 있습니다. TempData 값은 을 읽을 때까지 또는 세션이 종료 될 때까지 유지됩니다. 이 웨이의 TempData를 유지하면 TempData의 값이 단일 요청을 초과하여 사용할 수 있기 때문에 리디렉션 같은 시나리오를 사용할 수 있습니다.

희망이 있으면 답을 얻을 수 있습니다.

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" /> 
} 

는 희망이 내가 면도기 구문을 사용했습니다에도 불구하고 감지 할 수 있어야합니다.

관련 문제