0

我有一个 MVC3 Internet 应用程序。

基本上它有一个注册表单,上面有 3 个单选按钮。每当我检查一个单选按钮并点击submit按钮时,它应该转到控制器并将数据插入我的数据库。

我也对Registration表单中的字段进行了验证。

在某处stackoverflow,我已经阅读了该内容,Property names in the Model and the Names of the fields in the view have to be matched以便即使在验证错误之后也能保留表单中的值。

此语句非常适用于 TextBoxes 和 Dropdownlists。

我的问题是:如何有不同的名称 foreach radiobutton

正如我所说,我的表单有 3 个单选按钮。

说,这些是文本框,后跟单选按钮

Phone 1 // here is the radio button1
Phone 2 // here is the radio button2
Phone 3 // here is the radio button3

在我的模型中,我有

public string Phone1 { get; set; }
public string Phone2 { get; set; }
public string Phone3 { get; set; }
//also i have a preferred phone--which sets if any of the phone is selected
public bool PreferredPhone { get; set; }

我试过这样的东西

Phone1:
@Html.RadioButtonFor(model => model.PreferredPhone, Model.Phone1, new { id = "Phone1", @onclick = "PrefferedPhone(this)" })
Phone2:
@Html.RadioButtonFor(model => model.PreferredPhone, Model.Phone2, new { id = "Phone2", @onclick = "PrefferedPhone(this)" })
Phone3:
@Html.RadioButtonFor(model => model.PreferredPhone, Model.Phone3, new { id = "Phone3", @onclick = "PrefferedPhone(this)" })

但是此声明将所有单选按钮的名称设置为PreferredPhone

如何为每个单选按钮设置不同的名称?

即使我尝试将 RadioButton 名称保留为model=>model.Phone1, model=>model.Phone2, model=>model.Phone3,但如果我这样设置,我可以选择所有三个单选按钮。

4

1 回答 1

0

当您谈论选择所有三个单选按钮时,听起来您正在谈论它们,就好像它们是复选框一样。不能同时选择同一组中的单选按钮,每组只能选择一个(但也许您已经知道,我误解了)。

根据您在 Stackoverflow 中某处所读到的内容,模型中的属性名称和视图中字段的名称必须匹配是正确的。例如,如果您在这样的视图中有单选按钮:

@Html.RadioButton("stuffRadio", 1)
@Html.RadioButton("stuffRadio", 2)
@Html.RadioButton("stuffRadio", 3)
@Html.RadioButton("stuffRadio", 4)

然后在表单发布后在控制器中:

[HttpPost]
public ActionResult TheAction(Model model, string stuffRadio)
{
    //dostuff to model and other things
    string value = stuffRadio;
    //dostuff to the selected radioStuff :)
}

无论如何,如果我误解了,那么我想问你作为回报。你说你想区分每个单选按钮,我不太清楚为什么。这样您就可以在发布操作中获取所有电话号码并进入控制器吗?

使用我自己的例子,我会简单地做这样的事情:

@Html.RadioButton("stuffRadioGroup1", 1)
@Html.RadioButton("stuffRadioGroup2", 2)
@Html.RadioButton("stuffRadioGroup3", 3)
@Html.RadioButton("stuffRadioGroup4", 4)

但话又说回来,如果我想读取所有这些组选择,我当然必须对控制器中的参数做同样的事情,如下所示:

[HttpPost]
public ActionResult TheAction(Model model, 
    string stuffRadioGroup1, string stuffRadioGroup2, 
    string stuffRadioGroup3, string stuffRadioGroup4)
{
    //dostuff to model and other things
    string value1 = stuffRadioGroup1;
    string value2 = stuffRadioGroup2;
    string value3 = stuffRadioGroup3;
    string value4 = stuffRadioGroup4;
    //dostuff to the selected radioStuff :)
}

再说一次,我可能会误解,然后你当然会纠正我;)稍后!

##########已编辑###################

首先,如果您想要提交隐藏字段,它们必须在表单中,并且该特定隐藏字段的名称必须作为参数传递给具有相同名称的控制器。例如:

@(Html.BeginForm("SomeAction", "Controller")
{
    <input type="hidden" name="derp" value="1234" />
    @Html.RadioButtonFor(model => model.PreferredPhone, Model.Phone3, new { id = "Phone3", @onclick = "PrefferedPhone(this)" })
    <button type="submit">submit</button>
}

如果该隐藏字段也应该通过,控制器应该是这样的:

[HttpPost]
public ActionResult SomeAction(Model mymodel, string derp, FormCollection collection)
{
    int number = Convert.toInt32(derp);
    //now number should be '1234'

    string phone3 = collection.Get("Phone3"); 
    //now you have the phone number and the hidden field telling you if that number is preffered

    TryUpdateModel(mymodel); //populate the model if it hasn´t already been populated

    if(ModelState.IsValid)
    {
        //do stuff
    else
    {
        //TODO: here you should set the model with the stuff from derp and collection before returning
        return View("SameViewAsBefore", mymodel);
    }
}

如您所见,我将 FormCollection 放在那里,只是为了采用不同的方法。希望这会有所帮助,如果没有,您可以随时再问:)(众所周知,我有时会误解一些事情)

于 2012-11-29T22:07:04.330 回答