如何将数据从控制器发送到viewmodel文本框

时间:2016-04-03 13:31:06

标签: c# asp.net-mvc

我正在开发一个MVC项目以获取乐趣,它从公共API获取数据,显示它,并根据用户输入计算它;我已接近目标的终点,但过去一天我遇到麻烦的一个问题是阻碍了我的进步。

问题如下:

我希望能够从我的控制器中获取数据,并在我的视图中按下按钮显示在可写文本框内(因此用户可以通过输入用户名和从中获取数据来自动生成数据公共API,或指定自己的自定义数据)。

查看

@{
ViewBag.Title = "Herblore";

Enter you name @Html.TextBox("Name")
<input type="submit" id="SubmitName" value="Submit" />

<script type = "text/javascript">
  $('#SubmitName').click(function() {
    var url = "/Calculator/PlayerLevelMsg";
    var name = $('#Name').val();
    $.get(url, {
      Brugername: name
    }, function(data) {
      $("#lData").html(data);
    });
  })

</script>

<div class="row">
    <div class="col-md-12">
        <div class="row">
            <div class="col-md-3">
                <h3 style="font-size: 24px">Current Level</h3>
            </div>
            <div class="col-md-3 col-md-pull-1">
                <h3><output id="lData"/></h3>
            </div>
            <div class="col-md-3 col-md-pull-1">
                <h3 style="font-size: 24px">Current EXP</h3>
            </div>
            <div class="col-md-3 col-md-pull-2">
                <h3><input type="text" id="lData" /></h3>
            </div>
        </div>
    </div>
</div>

我的Javascript允许我在计算器控制器类中运行此控制器:

public string PlayerLevelMsg(string BrugerName) {
    int Firemaking = 12;
    var playerdata = new OS_Efficiency_Calculator.Controllers.PlayerSearchController();
    string PlayerLevel = playerdata.GetLevel(BrugerName, Firemaking);
    string moreLevel = "PlayerLevel = 85";

    if (!String.IsNullOrEmpty(BrugerName))
        return "Player Level" + " " + moreLevel;
    else
        return "Please enter your name.";
}

返回一个包含API中单个值的字符串 - 这在重现我的问题的名义上是非常重要的,注释掉从我项目中的其他类收集的字符串并使用基本文本字符串会给你与我相同的结果,所以如果你想重现:

public string PlayerLevelMsg(string BrugerName) {
    if (!String.IsNullOrEmpty(BrugerName))
        return "Player Level = 99";
    else
        return "Please enter your name.";
}

我的问题如下; 使用上面的代码,我可以查看controller的输出就好了#34; <output id="lData"/>&#34; - 但是,这不是一个文本框,因此用户无法对其进行编辑。

另一方面,不会。这可能是因为它是一种输入类型,但我找不到文本框输出类型,我在MVC中也没有足够的经验来完全理解为什么我不能将文本框绑定到通过ID的价值,当它在一般的WPF应用程序(我花费最多的时间练习)时可以正常工作。

在我看来应该有一些非常简单的答案,我希望你们能帮助我,而且所提供的半代码是足够的;如上所述,理想的解决方案是在这张图片中:

h

这两个值都是&#34; 85&#34;,但是文本框坚持认为它不应该改变 - 非常感谢花时间去浏览!

1 个答案:

答案 0 :(得分:0)

@{
ViewBag.Title = "Herblore";


Enter you name @Html.TextBox("Name")
<input type="submit" id="SubmitName" value="Submit" />

< script type = "text/jscript" >
  $('#SubmitName').click(function() {
    var url = "/Calculator/PlayerLevelMsg";
    var name = $('#Name').val();
    $.get(url, {
      Brugername: name
    }, function(data) {
      $("#lData").val(data);
    });
  })

< /script>

<div class="row">
    <div class="col-md-12">
        <div class="row">
            <div class="col-md-3">
                <h3 style="font-size: 24px">Current Level</h3>
            </div>
            <div class="col-md-3 col-md-pull-1">
                <h3><input type="text" id="lData"/></h3>
            </div>
            <div class="col-md-3 col-md-pull-1">
                <h3 style="font-size: 24px">Current EXP</h3>
            </div>
            <div class="col-md-3 col-md-pull-2">
                <h3><input type="text" id="lData" /></h3>
            </div>
        </div>
    </div>
</div>

您需要使lData成为文本类型的输入字段,并在JavaScript函数中将字段的值设置为从控制器返回的数据。

请访问此网站以了解有关输入字段的更多信息:list of supported mimeType