我在ASP.NET MVC视图中有Button和TextBox - 如何在单击此按钮后将Button的值发送到TextBox?

时间:2013-10-16 10:12:03

标签: c# asp.net-mvc-4 button textbox

我在ASP.NET MVC的TextBox中有Button和View。现在,如何在单击此按钮后将Button的某些值(例如string x="1";)发送到TextBox?我有这个值显示在这样的url地址:/local:xxxxx/Calculator?TextBox=&Command=1点击按钮后值为1,但我不知道如何将此值发送到TextBox并转换为int并放入一些int变量。我的观点看起来像这样:

<input type="text" name="TextBox" value=""/>
        <table>
            <tr>
                <td><button type="submit" name="Command" value="7">7</button></td>
           </tr>

我的模型看起来像这样:

public class CModel
{
    public string Command { get; set; }
    public string TextBox { get; set; }
}

和控制器:

    [HttpGet]
    public ActionResult Index()
    {
        CModel model = new CModel();
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(CModel model)
    {

        if (model.Command == "1")
        {
            //do this and this
        }
        else if(model.Command == "2")
        {
            //do this and this
        }
        else if....{}

        return View(model);
    }

有没有办法让这个值“1”并发送到TextBox,然后发送到某个int类型的变量来保存它?怎么做?

2 个答案:

答案 0 :(得分:4)

你混淆了很多东西。

首先,如果你想要的只是在按钮点击上设置文本框的文本,只需使用javascript即。

假设你的按钮是这样的:

<input type="button" id="btnSetText" value="set Text" onclick="setText"  />

那么你的js脚本应该是:

<script>
    function setText(){
            document.getElementById('txtBoxId').value = 'watever'; 
   }
</script>

现在,如果你想在给定的控制器中向actionmethod发送一个值而不是这样:

  <script>
     window.href.location ='/ControllerName/ActionMethod?value=' + 1;
  </script>

其中ActionMethod是这样的:

public ActionResult ActionMethod(string value)
 {
       //process value
 }

现在,如果您只想访问表单上保留的所有控件值,我建议您使用@Html.BeginForm,并提供适当的操作。因此,当您按下保留在其中的提交按钮时,它将使用formcollection中的所有@Html控件来提升操作中指定的控制器,即

@using (Html.BeginForm())
{
    @Html.ValidationSummary(true, "Login failed. Check your login details.");
    <div>
        <fieldset>
            <legend>Login</legend>
            <div class="editor-label">
                @Html.LabelFor(u => u.UserName)
            </div>
            <div class="editor-field">
                @Html.TextBoxFor(u => u.UserName)
                @Html.ValidationMessageFor(u => u.UserName)
            </div>
            <div class="editor-label">
                @Html.LabelFor(u => u.Password)
            </div>
            <div class="editor-field">
                @Html.PasswordFor(u => u.Password)
                @Html.ValidationMessageFor(u => u.Password)
            </div>
            <div class="editor-label">
                @Html.CheckBoxFor(u => u.RememberMe)
                @Html.LabelFor(u => u.RememberMe)
            </div>
            <input type="submit" value="Log In" />
        </fieldset>
    </div>
}

你的ActionMethod就像:

    [HttpPost]
    public ActionResult Login(Models.User user)
    {
        if (ModelState.IsValid)
        {
            if (user.IsValid(user.UserName, user.Password))
            {
                FormsAuthentication.SetAuthCookie(user.UserName, user.RememberMe);
                return RedirectToAction("Index", "Home");
            }
            else
            {
                ModelState.AddModelError("", "Login data is incorrect!");
            }
        }
        return View(user);
    }

答案 1 :(得分:0)

//this takes request parameters only from the query string 

Request.QueryString["Command"];

在您的情况下,上述方法将有效。您可以将以上代码放在.cs页面中的Page Load事件中。

//this one works for bot - form and query string

Request["Command"];