如何获取具有非静态名称的参数列表 anp.net.mvc-5 C#
How to take list of arguments with non static names anp.net.mvc-5 C#
我需要在调查中创建一些 RadioButton
组。为了让它们处于不同的组中,我在执行 foreach 语句时创建了名称。它们的名字都以相同的开头。有我的代码
@foreach (var answer in Model.PossibleAnswers)
{
<div class="col-xs-2">
@Html.RadioButtonMatrix(answer.IdAspect.ToString(), answer.IdAspect)
</div>
}
还有我的自定义方法Html Helper
public static HtmlString RadioButtonMatrix(this HtmlHelper helper,
string target,
int value)
{
StringBuilder sb = new StringBuilder("SelectedValue.");
sb.Append(target);
string radioButton =
String.Format("<input name=\"" + sb + "\" type=\"radio\" value=\"{0}\"/>", value);
return new HtmlString(radioButton);
}
那么,是否可以在控制器方法中创建一个非静态参数名称?
我找到了这样的属性,但假设这不是我需要的
[HttpPost]
public void GetAnswersMatrix([Bind(Prefix="SelectedValue")]List<String> selectedValues)
{
}
感谢您的帮助!
我建议使用以下数据结构来帮助您解决更多问题:
class QuizModel
{
public string HowMuchDoYouLikeCSharp {get;set;}
public string HowMuchDoYouLikeCPlusPlus {get;set;}
}
public class QuizQuestion
{
public string Question { get; set; }
public string QuestionModelProp {get;set;} //This must match a prop name in the QuizModel
public List<string> PossibleAnswers { get; set; }
public string generateHTML()
{
StringBuilder ret = new StringBuilder();
ret.Append("<div>"+Question+"</div>");
foreach (string answer in PossibleAnswers)
{
ret.Append(String.Format(@"<input name='{0}' type='radio' value='{1}'/>{1}<br/>", QuestionModelProp, answer));
}
return ret.ToString();
}
}
[HttpPost]
public ActionResult SubmitAction(QuizModel quizData)
{
string HowMuchDoYouLikeCSharp = quizData.HowMuchDoYouLikeCSharp;
string HowMuchDoYouLikeCPlusPlus = quizData.HowMuchDoYouLikeCPlusPlus;
}
您将需要进行一些修改以满足您的需要,但这应该会给您一个很好的起点,甚至包括一个基本的答案随机发生器。为了保持形式安全,最好将答案和问题的形式值视为哈希或 guid 而不是文字字符串,但这是另一个问题的问题。
特别注意,由于问题和答案在同一个class,因此很容易在答案迭代时根据问题创建单选组。
编辑:修改了代码以更贴近您的需要,还包括一个模型作为示例。
我需要在调查中创建一些 RadioButton
组。为了让它们处于不同的组中,我在执行 foreach 语句时创建了名称。它们的名字都以相同的开头。有我的代码
@foreach (var answer in Model.PossibleAnswers)
{
<div class="col-xs-2">
@Html.RadioButtonMatrix(answer.IdAspect.ToString(), answer.IdAspect)
</div>
}
还有我的自定义方法Html Helper
public static HtmlString RadioButtonMatrix(this HtmlHelper helper,
string target,
int value)
{
StringBuilder sb = new StringBuilder("SelectedValue.");
sb.Append(target);
string radioButton =
String.Format("<input name=\"" + sb + "\" type=\"radio\" value=\"{0}\"/>", value);
return new HtmlString(radioButton);
}
那么,是否可以在控制器方法中创建一个非静态参数名称? 我找到了这样的属性,但假设这不是我需要的
[HttpPost]
public void GetAnswersMatrix([Bind(Prefix="SelectedValue")]List<String> selectedValues)
{
}
感谢您的帮助!
我建议使用以下数据结构来帮助您解决更多问题:
class QuizModel
{
public string HowMuchDoYouLikeCSharp {get;set;}
public string HowMuchDoYouLikeCPlusPlus {get;set;}
}
public class QuizQuestion
{
public string Question { get; set; }
public string QuestionModelProp {get;set;} //This must match a prop name in the QuizModel
public List<string> PossibleAnswers { get; set; }
public string generateHTML()
{
StringBuilder ret = new StringBuilder();
ret.Append("<div>"+Question+"</div>");
foreach (string answer in PossibleAnswers)
{
ret.Append(String.Format(@"<input name='{0}' type='radio' value='{1}'/>{1}<br/>", QuestionModelProp, answer));
}
return ret.ToString();
}
}
[HttpPost]
public ActionResult SubmitAction(QuizModel quizData)
{
string HowMuchDoYouLikeCSharp = quizData.HowMuchDoYouLikeCSharp;
string HowMuchDoYouLikeCPlusPlus = quizData.HowMuchDoYouLikeCPlusPlus;
}
您将需要进行一些修改以满足您的需要,但这应该会给您一个很好的起点,甚至包括一个基本的答案随机发生器。为了保持形式安全,最好将答案和问题的形式值视为哈希或 guid 而不是文字字符串,但这是另一个问题的问题。
特别注意,由于问题和答案在同一个class,因此很容易在答案迭代时根据问题创建单选组。
编辑:修改了代码以更贴近您的需要,还包括一个模型作为示例。