2015-06-08 104 views
1

我有一个视图,它上面有一个单选按钮组。单选按钮的确与我的模型无关。它只是决定代码将采取什么路径(根据他们所做的选择调用哪个存储过程)。我如何获得控制器的选择值?使用剃须刀的单选按钮

事情是这样的:

<p> 
    Select the option describing what you want to do: 
    <br/> 
    <br/> 
    <label>@Html.RadioButton("selectProcess", "NewLetter", new { @id = "NewLetter" })Create a New Letter</label> 
    <br /> 
    <label>@Html.RadioButton("selectProcess", "LetterInProgress", new { @id = "LetterInProgress" })Edit a Letter in Progress</label> 
    <br/> 
    <label>@Html.RadioButton("selectProcess", "GeneratedLetter", new { @id = "GeneratedLetter" })Edit a Letter that has been Generated</label> 
    <br/> 
    <label>@Html.RadioButton("selectProcess", "AppendGeneratedLetter", new { @id = "AppenGeneratedLetter" })Append a Generated Letter</label> 

    <input type="submit" value="Go" /> 

</p> 

不知道我是否需要这些ID在这里,但我只是想在我的控制器接收所选择的值,并调用一个存储过程或其他的方法(如我的模型的一部分)...选定的选项不代表模型中的字段。

我不是一个很好的前端人员,所以我知道我可能会在这方面做得比较落后。

+0

您应该使用具有属性'selectProcess'的视图模型并回发视图模型。否则,您将需要使用Request [“selectProcess”]来访问该值。是的,你应该给单选按钮和'ID'属性以避免无效的HTML(没有它们,'RadioButton()'方法将生成所有单选按钮'id =“selectProcess”' –

回答

0

只需将HTML放在表单中并将其发布到您的控制器,就像您想要传回服务器的任何其他数据一样。

<form action="/Controller/HandlePost" method="post"> 
    <p>               <!-- trimmed for clarity --> 
     Select the option describing what you want to do: 
     <br/> 
     <label>@Html.RadioButton("selectProcess", "NewLetter", new { @id = "NewLetter" })Create a New Letter</label> 
     <input type="submit" value="Go" /> 
    </p> 
</form> 

在服务器端,使用[AcceptVerbs(HttpVerbs.Post)]周围的行动只接受后,然后用视图重定向到一个动作之后,清除后的数据。

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult HandlePost 
{ 
    string selectProcess = Request.Form("selectProcess"); 

    // process selectProcess data however you need 

    return RedirectToAction("Index", "Home"); 
} 

如果因任何原因,你有一个单一的控制器,这两个处理后的数据,并返回如果通过GET访问的视图,你可以这样做:

public ActionResult Index 
{ 
    if (Request.HttpMethod.ToString() == "POST") 
    { 
     // handle POST data 
     string selectProcess = Request.Form("selectProcess"); 
     // process selectProcess data however you need 
     return RedirectToAction("Index", "Home"); 
    } 

    // handle GET view 
    return View(); 
} 

支柱部内的重定向仍然是这是允许浏览器刷新并且后台历史记录工作而不重新发送发布数据所必需的。

显然,控制器,HandlePost,Home,Index等将被替换为您的控制器和操作名称。


由于@Stephen Muecke在评论中提到,这是很好的做法使用RadioButton()方法,以避免无效的HTML的时候给单选按钮的ID。

+0

感谢您的伟大提示。我只需要查看我的ActionResult SelectProcess()方法中的Request [“selectProcess”],该方法标记了属性[HttpPost] – SherryA