2012-02-01 189 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保存在某个地方 - 除非它不是要在请求之间进行更改,这意味着你不需要将它提交给客户端并返回任何方式(见达林在这种情况下对如何处理它的例子的回应)。

相关问题