2012-02-01 138 views
0

我對asp.net mvc相當陌生,我有一個問題。例如型號:傳遞模型查看,然後再次從視圖傳遞給控制器​​

public class FooModel 
{ 
public string StrA {get; set;} 
public string StrB {get; set;} 
} 

我怎麼可以做這樣的事情:通模式來查看(模型STRA填滿,STRB空),更新我的模型的STRB(STRA填充,STRB填寫),然後將其提交給我在StrA和StrB都被填充的情況下(默認情況下,我會通過只填充StrB的模型的新實例並且我以前的StrA值將消失)。

我知道我可以使用HiddenFor,但有沒有其他方法可以做到這一點?

回答

2

我知道我可以使用HiddenFor,但有沒有其他方法可以做到這一點?

在您的POST操作中,您可以從您在GET操作中獲取的相同位置獲取StrA屬性的值。這樣你就不需要使用隱藏字段來保存它。

例如:

public ActionResult Index() 
{ 
    var model = new FooModel 
    { 
     StrA = PopulateStrAFromSomewhere() 
    }; 
    return View(model); 
} 

[HttpPost] 
public ActionResult Index(string strB) 
{ 
    var model = new FooModel 
    { 
     StrA = PopulateStrAFromSomewhere(), 
     StrB = strB 
    } 

    ... do something with the model 
} 

現在在視圖中你只能有StrB表單內的輸入字段,這將允許用戶修改它的值:

@model FooModel 
@using (Html.BeginForm()) 
{ 
    @Html.LabelFor(x => x.StrB) 
    @Html.EditorFor(x => x.StrB) 
    <button type="submit">OK</button> 
} 
0

你可以建立你自己的POST使用例如jQuery AJAX(http://api.jquery.com/jQuery.post/)或手動構建表單並提交它(http://api.jquery.com/submit/)。這意味着您不必在頁面上創建可見的表單(如果這是您想要避免的)。

但是,您需要將數據傳遞給DOM並以某種方式保留它(例如,使用隱藏字段)。由於HTML是無狀態的,所以如果你真的想以某種方式將其返回到服務器,你不能奇蹟般地將StrA保存在某個地方 - 除非它不是要在請求之間進行更改,這意味着你不需要將它提交給客戶端並返回任何方式(見達林在這種情況下對如何處理它的例子的迴應)。

相關問題